我有一个对象,我正在使用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构造的)。我在哪里放这个代码?在构造函数中?
由于
答案 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。