【问题标题】:Forward declaration of template class nested inside template class嵌套在模板类中的模板类的前向声明
【发布时间】:2015-07-10 13:23:30
【问题描述】:

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

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 ?

【问题讨论】:

    标签: c++ templates nested


    【解决方案1】:

    试试下面的

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

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

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

    【讨论】:

    • 天哪,这太明显了...感谢您的回复:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多