2010-09-08 8 views
0

exemple:comment obtenir le type de variable?

template<typename T> 
struct type_of { 
    typedef boost::mpl::if_<boost::is_pointer<T>, 
    typename boost::remove_pointer<T>::type, 
    T 
    >::type type; 
}; 

int main() { 
    int* ip; 
    type_of<ip>::type iv = 3; // error: 'ip' cannot appear in a constant-expression 
} 

Merci!

Répondre

2

Vous ne pouvez pas. Soit utiliser des extensions spécifiques au compilateur ou Typeof de Boost (qui cache le comportement spécifique du compilateur derrière une interface cohérente). En C++ 0x, vous pouvez utiliser decltype: decltype(ip) iv = 3; Si votre compilateur prend en charge cet aspect de C++ 0x, vous avez de la chance.

+1

Fous à tous! J'ai écrit test: http://liveworkspace.org/code/1925198987ec402e5f6ca589d7d4944d – niXman

2

Dans la norme actuelle de C++, vous ne pouvez pas obtenir le type de variables, du moins pas sans éléments spécifiques au compilateur (mais essayez boost::typeof qui rassemble ces astuces de manière transparente). Ce que vous avez écrit est fondamentalement un modèle qui supprime un qualificateur de pointeur d'un type: type_of<int>::type est int comme type_of<int*>::type.

Questions connexes