gpt4 book ai didi

c++ - 与第三方库的菱形继承(钻石问题)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:39 29 4
gpt4 key购买 nike

我在 C++ 中有一个像这样的经典菱形问题

  A
/ \
B C
\ /
D

我知道这通常可以通过让 B 和 C 虚拟继承 A 来解决。

但我的问题是类 A 和 B 来 self 无法编辑的第三方库,并且 B 从 A 继承未标记为虚拟。

有办法解决吗?

感谢您的帮助;-)

最佳答案

解决这个问题的一个简单方法是引入一个Adapter类(class)。这样,层次结构就变成了

  A
/
B AdapterC
\ /
D

AdapterC 的代码看起来像

class AdapterC
{
public:
explicit AdapterC(C c) : c(std::move(c)) {}
operator C& () { return c; } //Maybe this should be explicit too...
/** Interface of C that you want to expose to D, e.g.
int doSomething(double d) { return c.doSomething(d); }
**/
private:
C c;
};

俗话说,“All problems in computer science can be solved by another level of indirection, except of course for the problem of too many indirections”。当然,编写和维护这个 Adapter 的工作量可能会很大。因此,我认为评论您的问题的人可能是对的,您应该重新审视您的设计。

关于c++ - 与第三方库的菱形继承(钻石问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335708/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com