Listing 2

// shapes.cpp
#include <shapes.h>

DEFINE_SIMPLE_SERIALIZABLE_BEGIN (Point)
SERIALIZABLE_FIELD (Point, m_pt)
DEFINE_SIMPLE_SERIALIZABLE_END (Point)

DEFINE_SERIALIZABLE_BEGIN (Shape)
SERIALIZABLE_FIELD (Shape, m_shapeId)
DEFINE_SERIALIZABLE_END (Shape)

DEFINE_SERIALIZABLE_BEGIN (Circle)
SERIALIZABLE_FIELD (Circle, m_center)
SERIALIZABLE_FIELD (Circle, m_radius)
DEFINE_SERIALIZABLE_END (Circle)

DEFINE_SIMPLE_SERIALIZABLE_BEGIN (BunchOfShapes)
SERIALIZABLE_FIELD (BunchOfShapes, m_shapes)
DEFINE_SIMPLE_SERIALIZABLE_END (BunchOfShapes)

// ...