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

Lou*_*uen 5 c++ templates nested

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

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

template<int N>
class Outer::Inner {};
Run Code Online (Sandbox Code Playgroud)

现在如果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 {};
Run Code Online (Sandbox Code Playgroud)

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

Vla*_*cow 7

请尝试以下方法

template<typename T>
template <int N>
class Outer<T>::Inner {};
Run Code Online (Sandbox Code Playgroud)

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

1可以在类或类模板中声明模板; 这样的模板称为成员模板.可以在其类定义或类模板定义之内或之外定义成员模板.应使用类模板的模板参数和成员模板的模板参数指定在其类模板定义之外定义的类模板的成员模板.