簡體   English   中英

為什么QObject需要在多重繼承的情況下成為第一個

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM