模板类的嵌套类,模板类的静态成员变量

时间:2014-02-04 18:32:11

标签: c++ templates static nested

以下代码有效:

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的类型/值不匹配'模板类向量'

知道如何嵌套课程吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

你需要告诉编译器,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);