Domanda

che sto cercando di fare qualcosa in questo senso:

int var = 5;
std::numeric_limits<typeid(var)>::max();

, ma sorpresa delle sorprese non funziona. Come posso risolvere questo problema?
Grazie.

È stato utile?

Soluzione

È possibile utilizzare il tipo:

int the_max = std::numeric_limits<int>::max()

È possibile utilizzare un modello di funzione di supporto:

template <typename T>
T type_max(T)
{
    return std::numeric_limits<T>::max();
}

// use:
int x = 0;
int the_max = type_max(x);

In C ++ 0x è possibile utilizzare decltype:

int x = 0;
int the_max = std::numeric_limits<decltype(x)>::max();

Altri suggerimenti

typeid non restituisce un tipo, ma un oggetto runtime type_info. Questo parametro di modello si aspetta un tipo in fase di compilazione, in modo che non funzionerà.

In alcuni compilatori come gcc, è possibile utilizzare

std::numeric_limits<typeof(var)>::max();

In caso contrario, si potrebbe provare a Boost.Typeof .

In C ++ 0x, è possibile utilizzare

std::numeric_limits<decltype(var)>::max();

(BTW, @ di James type_max è molto meglio se si non è necessario in modo esplicito il tipo.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top