我有多个QObject子类,它们应该充当接口类,并由其他一些类实现(继承)。例如,让class A : virtual public QObject
和class B : virtual public QObject
成为接口类。我需要一个QDialog
对象来实现他们的行为,例如:class X: public QDialog, A, B
。
不幸的是,我没有在设计时仔细阅读文档,现在我意识到了两个事实:
static_cast
虚拟QObject
对象到A*
。 (这就是编译器所说的!)尽可能减少影响代码的最佳替代设计是什么?我可以想到宏观黑客。也许基类中的一个宏(如Q_OBJECT
)将所有成员,信号,基数插槽复制到派生类中?
注意 QObject
无法多次继承,这真的很糟糕。 ISN'吨?
答案 0 :(得分:2)
如果您确实需要通过QObject
和A
类公开B
成员函数,请创建一个抽象基类(即只包含纯虚拟成员函数的类),例如{{ 1}},并重新声明需要公开的AbstractQObject
成员函数。
让QObject
和A
几乎来自B
和AbstractQObject
来自X
,QDialog
和A
。
这可以解决您描述的问题,但我怀疑您最好重新设计代码。