QFlags: befriend the QDataStream serialization operators
We can't define them as hidden friends in qflags.h because QDataStream is only forward-declared at this point. But we can simplify their implementation in qdatastream.h. This is also done in preparation for the 64-bit QFlags. Change-Id: Ia8c5859422f5737a3539fffd9da284bc9a0f5240 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
parent
0c707c6ebe
commit
729c0960b8
@ -172,6 +172,8 @@ private:
|
|||||||
return (it == end ? Int(0) : (Int(*it) | initializer_list_helper(it + 1, end)));
|
return (it == end ? Int(0) : (Int(*it) | initializer_list_helper(it + 1, end)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename E> friend QDataStream &operator<<(QDataStream &, QFlags<E>);
|
||||||
|
template <typename E> friend QDataStream &operator>>(QDataStream &, QFlags<E> &);
|
||||||
Int i;
|
Int i;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -516,16 +516,11 @@ inline QDataStream &QDataStream::operator<<(quint64 i)
|
|||||||
|
|
||||||
template <typename Enum>
|
template <typename Enum>
|
||||||
inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
|
inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
|
||||||
{ return s << typename QFlags<Enum>::Int(e); }
|
{ return s << e.i; }
|
||||||
|
|
||||||
template <typename Enum>
|
template <typename Enum>
|
||||||
inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
|
inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
|
||||||
{
|
{ return s >> e.i; }
|
||||||
typename QFlags<Enum>::Int i;
|
|
||||||
s >> i;
|
|
||||||
e = QFlag(i);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
typename std::enable_if_t<std::is_enum<T>::value, QDataStream &>
|
typename std::enable_if_t<std::is_enum<T>::value, QDataStream &>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user