我即将用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);
}