1
0
mirror of https://github.com/vcmi/vcmi.git synced 2026-05-22 09:55:17 +02:00

vcmi: use std::variant

This commit is contained in:
Konstantin
2023-04-15 04:33:00 +03:00
parent 8dcb041917
commit 0d35606a44
12 changed files with 131 additions and 119 deletions
+15 -3
View File
@@ -9,6 +9,7 @@
*/
#pragma once
#include <boost/mpl/vector.hpp>
#include <boost/mpl/for_each.hpp>
#include "CTypeList.h"
@@ -43,10 +44,21 @@ class DLL_LINKAGE BinaryDeserializer : public CLoaderBase
Source & source;
std::vector<std::function<Variant()>> funcs;
template <class V>
struct mpl_types_impl;
template <class... Ts>
struct mpl_types_impl<std::variant<Ts...>> {
using type = boost::mpl::vector<Ts...>;
};
template <class V>
using mpl_types = typename mpl_types_impl<V>::type;
VariantLoaderHelper(Source & source):
source(source)
{
boost::mpl::for_each<typename Variant::types>(std::ref(*this));
boost::mpl::for_each<mpl_types<Variant>>(std::ref(*this));
}
template<typename Type>
@@ -495,9 +507,9 @@ public:
}
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
void load(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> &data)
void load(std::variant<BOOST_VARIANT_ENUM_PARAMS(T)> &data)
{
typedef boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> TVariant;
typedef std::variant<BOOST_VARIANT_ENUM_PARAMS(T)> TVariant;
VariantLoaderHelper<TVariant, BinaryDeserializer> loader(*this);
+3 -3
View File
@@ -331,13 +331,13 @@ public:
}
}
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
void save(const boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> &data)
void save(const std::variant<BOOST_VARIANT_ENUM_PARAMS(T)> &data)
{
si32 which = data.which();
si32 which = data.index();
save(which);
VariantVisitorSaver<BinarySerializer> visitor(*this);
boost::apply_visitor(visitor, data);
std::visit(visitor, data);
}
template <typename T>
void save(const boost::optional<T> &data)