gpt4 book ai didi

c++ - 通过 QObject 子类实现多重继承的最接近解决方案

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

我有多个 QObject 子类,它们应该充当接口(interface)类并由(继承)其他一些类实现。例如让 class A : virtual public QObjectclass B : virtual public QObject是接口(interface)类。我需要一个 QDialog对象来实现他们的行为,如:class X: public QDialog, A, B .

不幸的是我在设计时没有仔细阅读文档,现在我意识到两个事实:

  1. 将插槽实现为纯虚拟成员函数是不可能的,因为 moc 生成的代码需要调用它们。
  2. QObject 派生类不支持多重继承。那不是钻石的东西。这是因为 moc 生成的代码不能 static_cast虚拟 QObject反对 A*通过虚拟基地。 (这就是编译器所说的!)

对代码影响尽可能小的最佳替代设计是什么?我可以想到宏黑客。也许基类中的宏(如 Q_OBJECT )将基类的所有成员、信号、槽复制到派生类?

注意 QObject 真的很糟糕不能多次继承。不是吗?

最佳答案

如果您确实需要通过AB 类公开QObject 成员函数,请创建一个抽象基类(即只有纯虚拟成员函数),例如 AbstractQObject,并在那里重新声明您需要公开的 QObject 成员函数。

AB 实际上派生自 AbstractQObjectX 来自 QDialog , AB

这应该可以解决您描述的问题,但我怀疑您最好重新设计代码。

关于c++ - 通过 QObject 子类实现多重继承的最接近解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693729/

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