我通过确保继承层次结构中的类实现虚拟读写功能来实现序列化:
class base
{
     ...
     virtual void read(std::istream&)=0;
     virtual void write(std::ostream&) const=0;
     virtual std::string is_a() const;
};
BEGIN_NAMESPACE_1(io)
    SERIALISE(base)
END_NAMESPACE_1
其中宏“SERIALISE”实现了“serialise”和“deserialise”函数的重载,以允许通过基类指针轻松输入/输出:
#define SERIALISE(TYPE)\
void deserialise( boost::shared_ptr<TYPE>& dat, std::istream& ifs )\
{\
    std::string type;\
    read(type, ifs);\
\
    dat = TYPE::make_##TYPE(type);\
    dat->read(ifs);\
}\
\
void serialise( const boost::shared_ptr<TYPE>& dat, std::ofstream& ofs )\
{\
    write(dat->is_a(), ofs);\
    dat->write(ofs);\
}
但是,如果基类包含纯虚函数,我会收到编译器错误“无法分配抽象类型“基”的对象,因为以下函数在“基”中是纯的......”,大概是因为编译器试图实例化抽象类名传递给宏调用时的基类。有没有办法挽救这个 i/o 设计?