Я могу написать 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)
?
Поскольку operator<<
объявлен в QVariant.
В соответствии с QDataStream,
В дополнение к перегруженным потоковым операторам, описанным здесь, любые классы Qt, которые вы, возможно, захотите сериализовать в QDataStream, будут иметь соответствующие потоковые операторы, объявленные как не являющиеся членами класса.
В исходном коде QVariant вы можете найти две функции, не являющиеся членами (к сожалению, они не перечислены в документации по QVariant):
QDataStream& operator<<(QDataStream &s, const QVariant &p)
QDataStream& operator>>(QDataStream &s, QVariant &p)