【问题标题】:boost serialization: update member when deserializedboost 序列化:反序列化时更新成员
【发布时间】:2013-04-08 23:52:49
【问题描述】:

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

谢谢

【问题讨论】:

  • 您可以拆分保存和加载函数(BOOST_SERIALIZATION_SPLIT_MEMBER),在加载方法中,您可以在获得均值和标准值后实例化分布。

标签: c++ serialization boost boost-serialization


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2015-03-19
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多