cereal
A C++11 library for serialization
Classes | Macros | Functions
polymorphic_impl.hpp File Reference

Internal polymorphism support. More...

#include "cereal/details/polymorphic_impl_fwd.hpp"
#include "cereal/details/static_object.hpp"
#include "cereal/types/memory.hpp"
#include "cereal/types/string.hpp"
#include <functional>
#include <typeindex>
#include <map>
#include <limits>
#include <set>
#include <stack>

Go to the source code of this file.

Classes

struct  cereal::detail::PolymorphicCaster
 Base type for polymorphic void casting. More...
 
struct  cereal::detail::PolymorphicCasters
 Holds registered mappings between base and derived types for casting. More...
 
struct  cereal::detail::PolymorphicVirtualCaster< Base, Derived >
 Strongly typed derivation of PolymorphicCaster. More...
 
struct  cereal::detail::RegisterPolymorphicCaster< Base, Derived >
 Registers a polymorphic casting relation between a Base and Derived type. More...
 
struct  cereal::detail::binding_name< T >
 Binds a compile time type with a user defined string. More...
 
struct  cereal::detail::OutputBindingMap< Archive >
 A structure holding a map from type_indices to output serializer functions. More...
 
struct  cereal::detail::OutputBindingMap< Archive >::Serializers
 Struct containing the serializer functions for all pointer types. More...
 
struct  cereal::detail::EmptyDeleter< T >
 An empty noop deleter. More...
 
struct  cereal::detail::InputBindingMap< Archive >
 A structure holding a map from type name strings to input serializer functions. More...
 
struct  cereal::detail::InputBindingMap< Archive >::Serializers
 Struct containing the serializer functions for all pointer types. More...
 
struct  cereal::detail::InputBindingCreator< Archive, T >
 Creates a binding (map entry) between an input archive type and a polymorphic type. More...
 
struct  cereal::detail::OutputBindingCreator< Archive, T >
 Creates a binding (map entry) between an output archive type and a polymorphic type. More...
 
class  cereal::detail::OutputBindingCreator< Archive, T >::PolymorphicSharedPointerWrapper
 Holds a properly typed shared_ptr to the polymorphic type. More...
 
struct  cereal::detail::adl_tag
 
struct  cereal::detail::create_bindings< Archive, T >
 Causes the static object bindings between an archive type and a serializable type T. More...
 
struct  cereal::detail::instantiate_function<>
 When specialized, causes the compiler to instantiate its parameter. More...
 
struct  cereal::detail::polymorphic_serialization_support< Archive, T >
 
struct  cereal::detail::bind_to_archives< T, Tag >
 Begins the binding process of a type to all registered archives. More...
 
struct  cereal::detail::init_binding< T, Tag >
 Used to hide the static object used to bind T to registered archives. More...
 

Macros

#define CEREAL_BIND_TO_ARCHIVES(...)
 Binds a polymorhic type to all registered archives. More...
 
#define UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION(LoadSave)
 Error message used for unregistered polymorphic casts. More...
 

Functions

template<class T , typename BindingTag >
void cereal::detail::instantiate_polymorphic_binding (T *, int, BindingTag, adl_tag)
 Base case overload for instantiation. More...
 

Detailed Description

Internal polymorphism support.

Macro Definition Documentation

#define CEREAL_BIND_TO_ARCHIVES (   ...)
Value:
namespace cereal { \
namespace detail { \
template<> \
struct init_binding<__VA_ARGS__> { \
static bind_to_archives<__VA_ARGS__> const & b; \
static void unused() { (void)b; } \
}; \
bind_to_archives<__VA_ARGS__> const & init_binding<__VA_ARGS__>::b = \
bind_to_archives<__VA_ARGS__> \
>::getInstance().bind(); \
}} /* end namespaces */
Definition: access.hpp:40
A static, pre-execution object.
Definition: static_object.hpp:67

Binds a polymorhic type to all registered archives.

This binds a polymorphic type to all compatible registered archives that have been registered with CEREAL_REGISTER_ARCHIVE. This must be called after all archives are registered (usually after the archives themselves have been included).

#define UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION (   LoadSave)
Value:
throw cereal::Exception("Trying to " #LoadSave " a registered polymorphic type with an unregistered polymorphic cast.\n" \
"Could not find a path to a base class (" + util::demangle(baseInfo.name()) + ") for type: " + ::cereal::util::demangledName<Derived>() + "\n" \
"Make sure you either serialize the base class at some point via cereal::base_class or cereal::virtual_base_class.\n" \
"Alternatively, manually register the association with CEREAL_REGISTER_POLYMORPHIC_RELATION.");
An exception class thrown when things go wrong at runtime.
Definition: helpers.hpp:48

Error message used for unregistered polymorphic casts.