通过QObject子类最接近多重继承的解决方案
Closest solution to multiple inheritance through QObject subclasses
我有多个QObject子类,它们应该作为接口类,并由其他一些类实现(继承)。例如,设class A : virtual public QObject
和class B : virtual public QObject
为接口类。我需要一个QDialog
对象来实现它们的行为,如:class X: public QDialog, A, B
。
不幸的是,我在设计时没有仔细阅读文档,现在我意识到两个事实:
- 实现槽作为纯虚拟成员函数是不可能的,因为moc生成的代码需要调用它们。 qobject派生类不支持多重继承。那不是钻石的事。这是因为moc生成的代码不能通过虚拟基将虚拟
QObject
对象static_cast
转换为A*
。(这是编译器说的!)对代码影响最小的最佳替代设计是什么?我能想到宏观hack。也许基类中的宏(如Q_OBJECT
)将所有成员,信号,基槽复制到派生类?
注释 QObject
s不能被多次继承真是太糟糕了。不是吗?
如果你真的需要通过A
和B
类公开QObject
成员函数,创建一个抽象基类(即一个只有纯虚拟成员函数的类),比如AbstractQObject
,并在那里重新声明你需要公开的QObject
成员函数。
让A
和B
实际上是由AbstractQObject
和X
衍生而来,QDialog
、A
和B
。
这应该可以解决你所描述的问题,但我怀疑你最好重新设计你的代码
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 关于C++中具有多重继承"this"指针的说明
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 使用enable_if解决多重继承歧义
- 继承是否是将一组模型参数传递给不同类的可行解决方案
- 模板和unique_ptr继承情况下的重载解决方案
- 引用如何解决多重继承中的歧义
- 虚拟继承如何解决 c++ 中的多重继承(钻石)?它将走哪条路
- 如何解决这个C++多重继承类似的问题
- c++多重继承(菱形方案)范例
- 钻石继承的解决方案,但它合适吗
- 通过QObject子类最接近多重继承的解决方案