0

クラスがQtでどのように定義されているかを理解するのに苦労しています。

例として QT5 JSON API を取り上げます。

QJsonValue は、任意の JSON 値を表すクラスです。QJsonObject、QJsonArray、または QString、int などの標準型に変換できます。

これで、QJsonValue ヘッダーは次のようになります (関連のない部分を取り除きました。完全なファイルはこちらです)。

#include <QtCore/qglobal.h>
#include <QtCore/qstring.h>

class QDebug;
class QVariant;
class QJsonArray;
class QJsonObject; // class is pre-declared

class Q_CORE_EXPORT QJsonValue
{
    QJsonValue(const QJsonObject &o);
    QJsonObject toObject() const; // how does this work without 
                                  // any info on QJsonObject class structure??
    // ...
}

私を悩ませているのは、それQJsonObjectが既存のクラスとして事前に宣言されていることですが、クラスの内部に関する情報toObject()がないと、メソッドはコンパイルされないことがわかります(<QJsonValue>失敗しないだけでコンパイルされます)。

クラスの完全な説明は必要なく、アドレスだけが必要な場合があるため、const 参照についてはよくわかりません。

問題は、ファイルのどこにもQJsonObject.hが含まれていないことです。

これは魔法ですか、それとも何ですか?

4

1 に答える 1