*- c++的一个经常被忽视的方面是"protected"实际上是"public,需要一些额外的步骤"。
假设存在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,需要一些额外的步骤"。