cereal::base_class< Base > Struct Template Reference

Casts a derived class to its non-virtual base class in a way that safely supports abstract classes. More...

`#include </build/libcereal-YYPPni/libcereal-1.2.1/include/cereal/types/base_class.hpp>`

Inheritance diagram for cereal::base_class< Base >:

## Public Member Functions

template<class Derived >
| base_class (Derived const *derived)

## Public Attributes

Base * | base_ptr

## Detailed Description

### template<class Base>
struct cereal::base_class< Base >

Casts a derived class to its non-virtual base class in a way that safely supports abstract classes.

This should be used in cases when a derived type needs to serialize its base type. This is better than directly using static_cast, as it allows for serialization of pure virtual (abstract) base classes.

This also automatically registers polymorphic relation between the base and derived class, assuming they are indeed polymorphic. Note this is not the same as polymorphic type registration. For more information see the documentation on polymorphism.

See also
  virtual_base_class

struct MyBase
{
int x;
virtual void foo() = 0;
template <class Archive>
void serialize( Archive & ar )
{
ar( x );
}
};
struct MyDerived : public MyBase //<-- Note non-virtual inheritance
{
int y;
virtual void foo() {};
template <class Archive>
void serialize( Archive & ar )
{
ar( cereal::base_class<MyBase>(this) );
ar( y );
}
};

The documentation for this struct was generated from the following file:

- include/cereal/types/base_class.hpp