如何从具有相同非虚拟祖父母类的两个类继承?

问题描述 投票:0回答:1

假设我有 A、B、C 和 D 四个班级:

class A {
public:
    float someData;
    float someFunc();
}

class B : public A {
public:
    float someOtherData;
    float someOtherFunc();
}

class C : public A {
public:
    float evenMoreData;
    float evenMoreFuncs();
}

class D : public B, public C {
public:
    float andMoreData;
    float andMoreFuncs();
}

现在我希望 D 只继承 A 的一个实例。 我知道这是钻石继承,我可以通过在B和C中添加一个虚拟到“公共A”来解决这个问题,但这里的问题是B和A属于一个库,我无法更改。

除了让 B 成为 D 的成员并包装 B 的所有成员函数之外,还有什么方法可以做到这一点吗?

编辑: 正如评论中所指出的,在这种情况下,B 不需要从 A 继承,但 B 也充当其他类的基类,这些类本身不继承任何继承 A 的类。

c++ virtual-inheritance
1个回答
0
投票

这里的问题是

B
A
属于一个库,我无法更改。

好的,所以只剩下更改

C
D
的唯一选项。

您可以将

C
制作为类模板,然后可以使用它来继承
A
B
- 对于
D
,您将选择
C<B>
:

template<class Base>
class C : public Base {
public:
    float evenMoreData;
    float evenMoreFuncs();
};

class D : public C<B> {
public:
    float andMoreData;
    float andMoreFuncs();
};

演示

© www.soinside.com 2019 - 2024. All rights reserved.