diff --git a/src/serialization/cereal/io.h b/src/serialization/cereal/io.h index b90eacfaf93bb57d4740125f10911d460551d455..524af2e41cfecc21a15dfd10b2ed6f99c1a959bd 100644 --- a/src/serialization/cereal/io.h +++ b/src/serialization/cereal/io.h @@ -9,6 +9,14 @@ namespace wolf { namespace serialization { +/// @todo demangle typeid.name ? +template <typename T> +inline const std::string& type_name(const T&) +{ + static const std::string typeid_name = typeid(T).name(); + return typeid_name; +} + inline std::string extension(const std::string& file) { const std::size_t p = file.find_last_of("."); @@ -93,27 +101,18 @@ void serialize_pack(Ar&&) // end of expansion } -/// @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)) ); + archive( cereal::make_nvp(type_name(object), 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(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)) ); + archive( cereal::make_nvp(type_name(object), std::forward<T>(object)) ); serialize_pack(archive, std::forward<Args>(args)...); }