在外部类中使用类模板时如何定义内部类构造函数?

Posted

技术标签:

【中文标题】在外部类中使用类模板时如何定义内部类构造函数?【英文标题】:How to define inner class constructor when using class template in the outer class? 【发布时间】:2019-04-14 01:04:17 【问题描述】:

当外部类是模板时,如何定义嵌套类构造函数?

我尝试删除模板参数并且它有效。但是对于我正在做的事情,我需要这个价值。 我尝试使用带有和不带有-std=c++11 的g++(没有区别)。 我不想把我的代码放在头文件中,所以我没有这样尝试

#include <cstddef>

template <size_t M_SIZE=20>
class Outer
    class Inner
        Inner();
    ;
;
//Outer::Inner::Inner() 

int main()
    return 0;

当您取消注释该行时会发生这种情况

cl.cpp:9:1: error: 'Outer' is not a class, namespace, or enumeration
Outer::Inner::Inner() 
^
cl.cpp:4:7: note: 'Outer' declared here
class Outer
      ^
1 error generated.

shell 返回 1

【问题讨论】:

【参考方案1】:
template<size_t mSize> Outer<mSize>::Inner::Inner() 

但像往常一样,如果您打算在单独的文件中定义模板化实体,则必须在标题中显式实例化它们:

template class Outer<42>;

【讨论】:

以上是关于在外部类中使用类模板时如何定义内部类构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA学习之局部内部类,匿名内部类,静态内部类

16.内部类

java23种设计模式之四:建造者模式

匿名内部类

韩顺平Java——内部类

使用另一个类的私有类构造函数访问内部子类