C++ includes the operator dynamic_cast<T>(U * u)
for casting a pointer at runtime between two related types. However, this can only be
used for polymorphic classes. That is, it can only be used with related classes which have at least one virtual function.
Limiting the serializaton of pointers to only such classes would diminish the applicability
of the library.
Usage
The following functions are defined in the header
void_cast.hpp.
They are declared in the namespace
boost::serialization.
template<class Derived, class Base>
const void_cast_detail::void_caster &
void_cast_register(
Derived const * derived = NULL,
Base * const base = NULL
);
This function "registers" a pair of related types. It stores the fact that
Derived is immediately derived from
Base in a global table.
This "registration" can be invoked anywhere in the program. The table is built at
pre-runtime and is available anywhere else in the program.
only adjacent base/derived pairs need be registered. That is,
These functions cast a void pointer from one type to another. The source and
definition types are specified by passing references to the corresponding
extended_type_info
records. An attempt to cast between types not "registered" with
void_cast_register
will throw a
boost::archive::archive_exception
with value equal to
unregistered_cast