使用Cereal进行C ++序列化 - 如何最好地序列化多态类

时间:2016-04-01 22:41:37

标签: c++ c++11 serialization cereal

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

0 个答案:

没有答案