如何创建在封闭类之外定义的嵌套类的实例
How to create an instance of a nested class that is defined outside of the enclosing one?
如果我定义一个嵌套类,然后创建一个这样的实例:
class A
{
class B
{
...
};
B b;
};
一切都很好。但是如果我只是在 A 内部声明 B 并在外部定义它,我就无法创建 B 的实例,可能是因为编译器不知道 B 的实例需要多少空间。但是,当您在另一个类中定义一个类时,代码的可读性不大。有没有办法做到这一点?
class A
{
class B;
B b;
};
class A::B
{
...
};
很简单,只需定义类 B,然后在 A 中定义它的实例。
class B
{
}
class A
{
B memberB;
}
或者你可以转发声明它:
class B;
class A
{
B memberB;
}
class B
{
}
真正的嵌套类很少需要,也根本不有用。
当您使用类类型作为成员时,需要知道具体的类。这就是为什么你的第二个案例不起作用的原因。解决方法是使用指向B
的指针:
#include <memory>
class A
{
class B;
std::unique_ptr<B> b;
};
class A::B
{
};
相关文章:
- 对显式实例化的模板函数的未定义引用
- 未定义的类模板不会实例化以检查友元函数
- 将自定义 QMap 模板实例化以人类可读的形式保存在 QSettings 中
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 何时需要实例化函数模板定义?
- 使用用户定义的类型 UDT 实例化 std::atomic<>。如果 UDT 具有虚函数,则 l 墨水将失败。为什么?
- 实例化具有不完整类型的类模板格式不正确(如果该类型是在之后定义的)
- 将类成员函数的模板定义放在 CPP 文件中C++隐式实例化而不是 .H 允许吗?
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何使用自定义流操纵器在类实例中保存数据
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义
- 为什么c++允许成员函数定义中实例的私有成员访问
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- C++:如何在结构中定义类实例.类具有参数化的构造函数
- 自定义链表const_iterator无法遍历列表的非const实例
- 每个类实例的自定义函数 (C++)
- 下面哪些c++内置操作是为类实例定义的?