QT:继承导致模棱两可
Qt: inheritance cause ambiguous
我有以下情况:
class A: public QObject
class B: public A, public QThread
然后,继承模棱两可,因为qobject是继承两次...有针对这个的解决方法吗?
QThread
从 QObject
中非虚拟继承。因此,没有办法从QThread
和QObject
继承层次结构而不会产生歧义。虚拟继承在这里无济于事,因为您没有处理任何钻石继承模式。
修复程序是改变您的设计,如@gabor Angyal所述。
相关问题:我如何从qwidget和qthread继承?
qObject基类的多个继承不起作用。
您可以做这样的事情来解决此问题:
class A: public QObject
class B: public A
{
Q_OBJECT
public:
//...
QThread *threadController() { return &mThreadController; }
private:
//...
QThread mThreadController;
}
您还可以为所需的信号和插槽编写委托,而不是揭露整个QThread对象,或者只为B类编写更高的级别API,然后将其内部QThread完全隐藏。取决于您要做什么。
如果您确实需要子类qthread,则只需将其用作成员变量类型。
有点棘手,但可能对您有用:
template<class T>
class A: public T
class B: public A<QThread>
,如果您需要单独使用一个,则:
A<QObject> *a = new A<QObject>;
此模式称为Mixin。
update
好吧,我意识到MOC系统显然无法使用此解决方案。我支持海德的答案。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- GCC称将功能与多个继承过载时,称其为模棱两可,但Clang和MSVC没有
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- QT:继承导致模棱两可
- 重载函数的调用 - 以继承的类作为参数 - 是模棱两可的
- 没有函数重写的多重继承.为什么模棱两可
- 多重虚拟继承:为什么类方法不模棱两可?