Clang compatibility improved and variant support for serializer

This commit is contained in:
feedc0de committed 2024-01-02 19:54:25 +01:00
1 parent ac3f934118
commit ce791f5ff3
6 files changed
+497 -456

No files matched your search

+37
View File
@@ -118,6 +118,43 @@ QDataStream &operator>>(QDataStream &ds, std::map<Tkey, Tvalue> &map)
return ds;
}
template<typename ...T>
QDataStream &operator<<(QDataStream &ds, const std::variant<T...> &variant)
{
int index = variant.index();
ds << index;
using func_t = void(QDataStream&, const std::variant<T...> &);
static constexpr func_t *funcs[] = {
[](QDataStream& ds, const std::variant<T...> &variant) {
ds << std::get<T>(variant);
}...
};
funcs[index](ds, variant);
return ds;
}
template<typename ...T>
QDataStream &operator>>(QDataStream &ds, std::variant<T...> &variant)
{
int index;
ds >> index;
using func_t = std::variant<T...> (QDataStream&);
static constexpr func_t *funcs[] = {
[](QDataStream& ds) -> std::variant<T...> {
T value;
ds >> value;
return value;
}...
};
variant = funcs[index](ds);
return ds;
}
QDataStream &operator<<(QDataStream &ds, const GlobalGameSettings &globalGameSettings)
{
Q_UNUSED(globalGameSettings);