1

我有一个对象,我正在使用 boost 存档进行序列化。该对象有一个 type 的成员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 构造的)。我把这段代码放在哪里?在构造函数中?

谢谢

4

1 回答 1

1

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

一种解决方法可能是在堆上分配 normal_distribution 并使用 saver/loader-pattern 而不是一个序列化函数,就像这里记录的那样:http: //www.boost.org/doc/libs/1_53_0/libs/serialization/doc /tutorial.html#splitting

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

于 2013-04-16T14:44:22.187 回答