【问题标题】:Nested class of a template class, static member variable of the template class模板类的嵌套类,模板类的静态成员变量
【发布时间】:2023-03-31 01:05:02
【问题描述】:

以下代码有效:

template<typename T> class OtherClass
{
public:
    T member;
};

template<typename T> class MyClass
{         
public:
    vector<vector<OtherClass<T> > * > stacks;
};

template<typename T>
static vector<vector<OtherClass<T> > * > MyClass<T>::stacks =
    vector<vector<OtherClass<T> > * >(1024);

但是这个没有:

template<typename T> class MyClass
{         
public:
    class OtherClass
    {
    public:
        T member;
    };

    static vector<vector<OtherClass> * > stacks;
};

template<typename T>
vector<vector<MyClass<T>::OtherClass> * > MyClass<T>::stacks =
    vector<vector<MyClass<T>::OtherClass> * >(1024);

gcc 抱怨: 错误:“模板类向量”的模板参数列表中参数 1 的类型/值不匹配

知道如何嵌套类吗?

谢谢!

【问题讨论】:

    标签: c++ templates static nested


    【解决方案1】:

    你需要告诉编译器OtherClass是一个带有typename的嵌套类型

    template<typename T>
    vector<vector<typename MyClass<T>::OtherClass> * > MyClass<T>::stacks =
        vector<vector<MyClass<T>::OtherClass> * >(1024);
    

    而且不需要重复输入两次:

    template<typename T>
    vector<vector<typename MyClass<T>::OtherClass> * > MyClass<T>::stacks (1024);
    

    如果你不想重复一个复杂的原始类型,使用 typedef,仍然需要 typename:

    // in Myclass : using StackType = vector<vector<OtherClass>*>;
    template<typename T>
    typename MyClass<T>::StackType MyClass<T>::stacks (1024);
    

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 2019-05-10
      • 2012-12-13
      相关资源
      最近更新 更多