如何使类派生自同一基类两次,在c++ ?



假设存在A

我希望我的类从A派生两次,以便管理两个A段并访问它们的受保护方法。

:

typedef A yetA;
class D: public A, public yetA {};

这行不通。有办法做到吗?

首先…我要提醒您重新考虑这个设计,因为(排除任何其他细节)它似乎有点不可靠。我敢打赌,组合可能会更好地管理这些多个实例。

但是…如果你要这样做,你可以通过中间继承来实现。同一个直接词根不能出现多次,但间接词根是允许的。

template<int N>
struct ACopy : A {
using A::A;
};
class D: public ACopy<1>, public ACopy<2> {
};

为了消除歧义,只需遍历相应的中间碱基。

另外(或额外),模板ACopy可以使用using声明将您关心的受保护成员变为公共成员*。这应该有助于我建议的组成。


*- c++的一个经常被忽视的方面是"protected"实际上是"public,需要一些额外的步骤"。

最新更新