2009-12-17 72 views
1

我試圖做這樣的事情(完全人工合成的例子,因爲真正的代碼是有點令人費解):從模板作爲模板參數類型內部使用的typedef

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>(); 

所以基本上我試圖從另一個結構中使用typedef作爲模板參數的類型。有了這段代碼,編譯器卻抱怨說struct My_Type_Traits<T>::InfoType is not a type。那麼,我需要做些什麼才能做到這一點?

回答

9

您需要使用typename關鍵字:如typename My_Type_Traits<T>::InfoType讓編譯器知道您指的是嵌套類型。