Ottenere il tipo di un oggetto
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.
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