如何创建在封闭类之外定义的嵌套类的实例

How to create an instance of a nested class that is defined outside of the enclosing one?

本文关键字:实例 定义 嵌套 何创建 创建      更新时间:2023-10-16

如果我定义一个嵌套类,然后创建一个这样的实例:

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
{    
};
相关文章: