Pregunta
Estoy tratando de hacer algo a lo largo de estas líneas:
int var = 5;
std::numeric_limits<typeid(var)>::max();
pero sorpresa, sorpresa no funciona. ¿Cómo puedo solucionar este problema?
Gracias.
Solución
Puede utilizar el tipo:
int the_max = std::numeric_limits<int>::max()
Se puede utilizar una plantilla de función auxiliar:
template <typename T>
T type_max(T)
{
return std::numeric_limits<T>::max();
}
// use:
int x = 0;
int the_max = type_max(x);
En C ++ 0x puede utilizar decltype
:
int x = 0;
int the_max = std::numeric_limits<decltype(x)>::max();
Otros consejos
typeid
no devuelve ningún tipo, sino un objeto en tiempo de ejecución type_info
. Ese parámetro de plantilla espera un tipo en tiempo de compilación, por lo que no va a funcionar.
En algunos compiladores como gcc, se podría utilizar
std::numeric_limits<typeof(var)>::max();
De lo contrario, podría intentar Boost.Typeof .
En C ++ 0x, se podría utilizar
std::numeric_limits<decltype(var)>::max();
(Por cierto, @ de James type_max
es mucho mejor si no necesitan el tipo de forma explícita.)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow