在处理个人项目时,我发现自己处于一种情况,我想为我的抽象父类的子类创建可重用的代码块,这些子类可以实现其中的一些纯虚拟方法。为此,我创建了一个在主要子类之后继承的中间父类。但是,由于项目中最终子类的性质,除了子类之外的任何对象都可以访问中间父类是没有意义的。因此,我创建了这种类型的类结构:
class Foo
{
protected:
class Bar : protected Foo
{
public:
void a()
{
//implementation of a()
}
};
public:
virtual void a() = 0;
virtual void b() = 0;
};
class Beep : public Foo, private Foo::Bar
{
void b()
{
//implementation of b()
}
};
(我知道菱形继承(钻石问题)问题和其他通过多个来源从祖先类继承引起的问题。为了这个问题的目的,请假设它不是问题,因为它不是重点。)
在尝试将 Foo
定义为 Bar
的父项时,上述代码会导致“不允许不完整的类型”错误。有没有一种方法可以重构代码以消除错误,同时保持所需的类/可访问性结构?
虽然我对如何实现我所描述的内容很感兴趣(此时主要是出于好奇),但我会接受替代解决方案,只要它们导致匹配的行为,即:代码实现抽象基础的部分类仅对在所述基类之后继承的对象可见/可访问。
最佳答案
您可以转发声明Bar
并在Foo
之后定义它。
class Foo
{
protected:
class Bar;
public:
virtual void a() = 0;
virtual void b() = 0;
};
class Foo::Bar : protected Foo
{
public:
void a()
{
//implementation of a()
}
};
关于C++ - 在父类中定义子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471421/