30 #ifndef CEREAL_TYPES_BOOST_VARIANT_HPP_ 31 #define CEREAL_TYPES_BOOST_VARIANT_HPP_ 34 #include <boost/variant.hpp> 35 #include <boost/mpl/size.hpp> 39 namespace variant_detail
42 template <
class Archive>
48 void operator()(T
const & value)
const 57 template<
int N,
class Variant,
class ... Args,
class Archive>
58 typename std::enable_if<N == boost::mpl::size<typename Variant::types>::value,
void>::type
59 load_variant(Archive & ,
int , Variant & )
61 throw ::cereal::Exception(
"Error traversing variant during load");
65 template<
int N,
class Variant,
class H,
class ... T,
class Archive>
66 typename std::enable_if<N < boost::mpl::size<typename Variant::types>::value,
void>::type
67 load_variant(Archive & ar,
int target, Variant & variant)
76 load_variant<N+1, Variant, T...>(ar, target, variant);
82 template <
class Archive,
typename VariantType1,
typename... VariantTypes>
inline 85 int32_t which = variant.which();
88 variant.apply_visitor(visitor);
92 template <
class Archive,
typename VariantType1,
typename... VariantTypes>
inline 95 typedef typename boost::variant<VariantType1, VariantTypes...>::types types;
99 if(which >= boost::mpl::size<types>::value)
100 throw Exception(
"Invalid 'which' selector when deserializing boost::variant");
102 variant_detail::load_variant<0, boost::variant<VariantType1, VariantTypes...>, VariantType1, VariantTypes...>(ar, which, variant);
106 #endif // CEREAL_TYPES_BOOST_VARIANT_HPP_ #define CEREAL_NVP_(name, value)
Convenience for creating a templated NVP.
Definition: helpers.hpp:199
Definition: boost_variant.hpp:43
Definition: access.hpp:40
Main cereal functionality.
#define CEREAL_LOAD_FUNCTION_NAME
The deserialization (load) function name to search for.
Definition: macros.hpp:85
#define CEREAL_SAVE_FUNCTION_NAME
The serialization (save) function name to search for.
Definition: macros.hpp:92
An exception class thrown when things go wrong at runtime.
Definition: helpers.hpp:48