假设有一个类A。
我希望我的类从两次派生A,以便管理两个A段并访问它们的受保护方法。
喜欢:
typedef A yetA;
class D: public A, public yetA {};
Run Code Online (Sandbox Code Playgroud)
这是行不通的。有没有办法做到这一点?
首先......我会提醒您重新考虑这个设计,因为(除非有任何其他细节)它看起来有点狡猾。我愿意打赌组合可能会更好地管理这些多个实例。
但是......如果你要这样做,你可以通过中间继承来实现。同一直接基数不能出现多次,但允许间接基数。
template<int N>
struct ACopy : A {
using A::A;
};
class D: public ACopy<1>, public ACopy<2> {
};
Run Code Online (Sandbox Code Playgroud)
只需通过相应的中间基础即可消除歧义。
或者(或另外),模板ACopy可以使用 using 声明将您关心的受保护成员变为公共成员*。这应该有助于我建议的构图。