模板类的前向声明嵌套在模板类中

时间:2015-07-10 13:23:30

标签: c++ templates nested

您可以在普通类中转发声明模板内部类,并将定义的类型用作任何其他前向声明的类型。

class Outer {
    template <int N> class Inner;
    typedef Inner<0> Inner0;
    Inner0* f();
};

template<int N>
class Outer::Inner {};

现在如果Outer本身就是一个模板类,有没有办法将Inner的声明保留在Outer声明之外?类似的东西:

template<typename T>
class Outer {
    template <int N> class Inner;
    typedef Inner<0> Inner0;
    Inner0* f();
};

template<typename T, int N> //This won't work
class Outer<T>::Inner {};

是否有正确的语法来使用正确的模板参数声明Outer?

1 个答案:

答案 0 :(得分:7)

尝试以下

template<typename T>
template <int N>
class Outer<T>::Inner {};

根据C ++标准(14.5.2会员模板)

  

1可以在类或类模板中声明模板;这样的   模板称为成员模板。可以定义成员模板   在类定义或类模板定义之内或之外。 :一种   在其外部定义的类模板的成员模板   类模板定义应使用   类模板的模板参数后跟   成员模板的模板参数。