代码之家  ›  专栏  ›  技术社区  ›  Grizzly

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

  •  1
  • Grizzly  · 技术社区  · 15 年前

    我正在尝试这样做(完全合成的例子,因为真正的代码有点复杂):

    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 . 那么,我需要做什么才能使这个工作成功呢?

    1 回复  |  直到 15 年前
        1
  •  9
  •   Charles Salvia    15 年前

    你需要使用 typename 关键词:类 typename My_Type_Traits<T>::InfoType 让编译器知道您所引用的是嵌套类型。