【发布时间】:2023-03-27 05:22:01
【问题描述】:
我有多个 QObject 子类,它们应该充当接口类并由其他一些类实现(由继承)。例如让class A : virtual public QObject 和class B : virtual public QObject 成为接口类。我需要一个QDialog 对象来实现它们的行为,例如:class X: public QDialog, A, B。
不幸的是,我在设计时没有仔细阅读文档,现在我意识到了两个事实:
- 不可能将插槽实现为纯虚拟成员函数,因为 moc 生成的代码需要调用它们。
- QObject 派生类不支持多重继承。那不是钻石的事。这是因为 moc 生成的代码不能
static_cast一个虚拟的QObject对象通过虚拟基础到A*。 (编译器就是这么说的!)
尽可能减少对代码的影响的最佳替代设计是什么?我可以想到宏黑客。也许基类中的宏(如Q_OBJECT)将基类的所有成员、信号、槽复制到派生类?
注意 不能多次继承QObjects 真是太糟糕了。不是吗?
【问题讨论】:
标签: c++ qt inheritance diamond-problem moc