我很难弄清楚这些类是如何在 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。
这是魔法还是什么?