Почему возможно записать QVariant в QDataStream, когда QDataStream не имеет такого метода?

Я могу написать QVariant в QDataStream и прочитать QVariant из QDataStream без проблем.

QByteArray byteArray;

QDataStream outStream(&byteArray, QIODevice::WriteOnly);
QVariant outVar(QString("hello"));
outStream << outVar;

QVariant inVar;
QDataStream inStream(&byteArray, QIODevice::ReadOnly);
inStream >> inVar;

Моя проблема в том, как приведенный выше код компилируется и работает правильно, когда в QDataStream нет метода operator<<(QVariant v) ?

1

Решение

Поскольку operator<< объявлен в QVariant.

В соответствии с QDataStream,

В дополнение к перегруженным потоковым операторам, описанным здесь, любые классы Qt, которые вы, возможно, захотите сериализовать в QDataStream, будут иметь соответствующие потоковые операторы, объявленные как не являющиеся членами класса.

В исходном коде QVariant вы можете найти две функции, не являющиеся членами (к сожалению, они не перечислены в документации по QVariant):

QDataStream& operator<<(QDataStream &s, const QVariant &p)
QDataStream& operator>>(QDataStream &s, QVariant &p)
2

Другие решения


По вопросам рекламы [email protected]