2009-12-17 6 views
1

Je suis en train de faire quelque chose comme ceci (exemple complètement synthétique, car le code réel est un peu à alambiqué):En utilisant typedef à l'intérieur d'un modèle en tant que type d'argument modèle

enum MyInfoType 
{ 
    Value1, Value2 
}; 

template<typename T> struct My_Type_Traits 
{}; 

template<> struct My_Type_Traits<int> 
{ 
    typedef MyInfoType InfoType; 
}; 

template<typename T> 
class Wrap 
{ 
    template<My_Type_Traits<T>::InfoType INFO> int GetInfo() 
    {...} 
}; 

... 
Wrap<int> w; 
int info = w.GetInfo<Value1>(); 

Donc, fondamentalement, je suis essayer d'utiliser un typedef à l'intérieur d'une autre structure en tant que type d'un paramètre de modèle. Avec ce code cependant le compilateur se plaint que struct My_Type_Traits<T>::InfoType is not a type. Alors, que dois-je faire pour que cela fonctionne?

Répondre

9

Vous devez utiliser le mot-clé typename: comme typename My_Type_Traits<T>::InfoType pour indiquer au compilateur que vous faites référence à un type imbriqué.

Questions connexes