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

6

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

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个回答

8
尝试以下操作:
template<typename T>
template <int N>
class Outer<T>::Inner {};

根据C++标准(14.5.2成员模板):
1、模板可以在类或类模板中声明;这样的模板称为成员模板。成员模板可以在其类定义或类模板定义内外定义。在类模板之外定义的类模板的成员模板应使用类模板的模板参数,后跟成员模板的模板参数进行指定。请注意保留HTML标记。

哦,天啊,原来如此明显...感谢您的回复 :) - Louen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接