boost序列化:反序列化时更新成员

时间:2013-04-16 14:10:06

标签: c++ serialization boost boost-serialization

我有一个对象,我正在使用boost存档进行序列化。该对象具有boost::math::normal_distribution<double> distribution类型的成员,但是boost不为此类型提供序列化方法,因此我将序列化平均值和标准差。我的序列化函数如下所示:

template<class Archive>
    void serialize(Archive& ar, const unsigned int version){
        ar & BOOST_SERIALIZATION_NVP(mean);
        ar & BOOST_SERIALIZATION_NVP(std);
    }

当对象被反序列化时,我想用这些参数重新创建分布(因为默认值是用均值0和标准1构造的)。我在哪里放这个代码?在构造函数中?

由于

1 个答案:

答案 0 :(得分:1)

我不认为normal_distribution的当前实现是可序列化的,因为它没有任何方法可以在构造之后设置它的值。

解决方法可能是在堆上分配normal_distribution并使用saver / loader-pattern而不是一个序列化函数,如下所示:http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/tutorial.html#splitting

在加载器中,您可以使用new和加载的参数构造normal_distribution。