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.

¿Fue útil?

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
scroll top