我有多个 QObject 子类,它们应该充当接口类并由其他一些类(继承)实现。例如 letclass A : virtual public QObject
和 class B : virtual public QObject
be 接口类。我需要一个QDialog
对象来实现它们的行为,例如:class X: public QDialog, A, B
.
不幸的是,我在设计时没有仔细阅读文档,现在我意识到了两个事实:
- 将插槽实现为纯虚拟成员函数是不可能的,因为 moc 生成的代码需要调用它们。
- QObject 派生类不支持多重继承。那不是钻石的事。这是因为 moc 生成的代码不能
static_cast
将虚拟QObject
对象A*
通过虚拟基础。(这就是编译器所说的!)
什么是尽可能少地影响代码的最佳替代设计?我可以想到宏黑客。也许基类中的宏(如Q_OBJECT
)将基类的所有成员、信号、插槽复制到派生类?
注意QObject
s 不能被多次继承真的很糟糕。不是吗?