[英]Why QObject needs to be the first in case of multiple inheritance
根據http://qt-project.org/doc/qt-4.8/moc.html#multiple-inheritance-requires-qobject-to-be-first ,在使用多重繼承時, QObject
必須是基類中的第一個。
這是因為moc
工具中的某些限制還是C ++內存布局問題也被考慮在內,因此這種限制是否存在?
假設我們有一個類Test
聲明為:
class Test : public Foo, public QObject
{
Q_OBJECT
[..]
};
如果你看一下moc
工具生成的moc_test.cpp
文件,你會看到類似的東西:
[..]
const QMetaObject Command::staticMetaObject = {
{ &Foo::staticMetaObject, qt_meta_stringdata_Command,
qt_meta_data_Command, &staticMetaObjectExtraData }
};
[..]
編譯器會抱怨staticMetaObject
不是Foo
的成員,因為Foo
不是QObject
。 由於某種原因, moc
工具生成此代碼采用第一個父類。 因此,如果您將Test
聲明為:
class Test : public QObject, public Foo {};
生成的代碼看起來很適合編譯器。
我認為這只是為了方便,因為moc
工具很難知道哪個父類是QObject
而不解析整個層次結構。
注意:如果您不使用Q_OBJECT
宏,則可以按任何順序從其他人派生您的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.