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