我即将使用Cereal实现对象图(实际上是树)的序列化。
Cereal不支持序列化原始指针(这些指针指向的对象)。我目前的想法是在对象上有一个getType()
函数来找出它们的类型,然后根据它们的类型用工厂构建它们。
在创建正确的对象后,我们可以使用存档对其进行初始化。
这绝对不是一个理想的解决方案,因为每个类都需要从getType()
函数返回一个唯一类型。
如何改进这种架构?
template <class Archive>
void save( Archive & ar, const unsigned int version ) const
{
ar << _obj->getType();
ar << *_obj;
}
template <class Archive>
void load( Archive & ar, const unsigned int version )
{
ObjType type;
ar >> type;
_obj = Factory::createWithType(type);
_obj->load(ar, version);
}