使用模板内部的typedef作为模板参数类型

Gri*_*zly 1 c++ templates

我正在尝试做这样的事情(完全合成的例子,因为真正的代码有点令人费解):

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>();
Run Code Online (Sandbox Code Playgroud)

所以基本上我正在尝试使用另一个struct中的typedef作为模板参数的类型.但是,使用此代码,编译器会抱怨struct My_Type_Traits<T>::InfoType is not a type.那么我需要做些什么来使这项工作?

Cha*_*via 9

您需要使用typename关键字:喜欢typename My_Type_Traits<T>::InfoType让编译器知道您指的是嵌套类型.