我有以下情况:
class A: public QObject
class B: public A, public QThread
然后由于QObject被继承两次而导致继承不明确... 这个问题有方法解决吗?
答案 0 :(得分:3)
QThread
从QObject
继承非虚拟内容。因此,无法在不产生歧义的情况下从QThread
和QObject
继承层次结构。虚拟继承在这里没有用,因为你没有处理任何钻石继承模式。
正如@Gabor Angyal所提到的,修复是改变你的设计。
答案 1 :(得分:1)
有点棘手,但可能适合你:
template<class T>
class A: public T
class B: public A<QThread>
如果您需要单独使用A,那么:
A<QObject> *a = new A<QObject>;
此模式称为Mixin。
<强>更新强>
好的,我意识到moc系统显然无法使用此解决方案。我支持hyde's answer。
答案 2 :(得分:1)
QObject基类的多重继承不起作用。
你可以做这样的事情来解决这个问题:
class A: public QObject
class B: public A
{
Q_OBJECT
public:
//...
QThread *threadController() { return &mThreadController; }
private:
//...
QThread mThreadController;
}
您还可以为所需的信号和插槽编写代理,而不是暴露整个QThread对象,或者只为B类编写更高级别的API,并使其内部QThread完全隐藏。取决于你想要做什么,真的。
如果你真的需要继承QThread,那么只需将其用作成员变量类型。