diff --git a/src/serialization/cereal/io.h b/src/serialization/cereal/io.h index afd32843878e43a66674970a69df37dbf6429fe2..b90eacfaf93bb57d4740125f10911d460551d455 100644 --- a/src/serialization/cereal/io.h +++ b/src/serialization/cereal/io.h @@ -87,20 +87,35 @@ struct Extensions }; }; -template <typename Ar, typename S, typename T, typename... Args> -void serialize(S& stream, T&& object, Args&&... args) +template <typename Ar> +void serialize_pack(Ar&&) { - Ar archive(stream); + // end of expansion +} - archive( cereal::make_nvp("object", std::forward<T>(object)) ); - archive( cereal::make_nvp("object", std::forward<Args>(args))... ); +/// @todo demangle typeid.name ? + +template <typename Ar, typename T, typename... Args> +void serialize_pack(Ar&& archive, T&& object, Args&&... args) +{ + archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) ); + serialize_pack(archive, std::forward<Args>(args)...); } template <typename Ar, typename S, typename T> void serialize(S& stream, T&& object) { Ar archive(stream); - archive( cereal::make_nvp("object", std::forward<T>(object)) ); + archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) ); +} + +template <typename Ar, typename S, typename T, typename... Args> +void serialize(S& stream, T&& object, Args&&... args) +{ + Ar archive(stream); + archive( cereal::make_nvp(typeid(T).name(), std::forward<T>(object)) ); + + serialize_pack(archive, std::forward<Args>(args)...); } template <typename EXT, typename InAr, typename OutAr>