Listing 1

// shapes.h
#include <SerDef.h>
#include <vector>
#include <boost/shared_ptr.hpp>

class Point
{
   DECLARE_SIMPLE_SERIALIZABLE (Point);
public:
   // ...
   Point() { m_pt[0] = m_pt[1] = 0.0; }
private:
   double m_pt[2];
};
class Shape : public SER_DECL AbstractSerializable
{
   DECLARE_ABSTRACT_SERIALIZABLE (Shape, AbstractSerializable);
   // ...
public:
   virtual void draw() = 0;
private:
   int m_shapeId;
};
class Circle : public Shape
{
   DECLARE_SERIALIZABLE (Circle, Shape);
public:
   Circle() : m_radius (1.0) {}
   virtual void draw() { /* ... */ }
   // ...
private:
   Point m_center;
   double m_radius;
};
class BunchOfShapes
{
   DECLARE_SIMPLE_SERIALIZABLE (BunchOfShapes);
   // ...
   std::vector<boost::shared_ptr<Shape> > m_shapes;
};