クラスが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が含まれていないことです。
これは魔法ですか、それとも何ですか?