2013-04-16 2 views
1

У меня есть объект, который я сериализую с помощью форматированного архива. Объект имеет член типа boost::math::normal_distribution<double> distribution, однако boost не предоставляет метод сериализации для этого типа, поэтому вместо этого я сериализую среднее и стандартное отклонение. Моя функция сериализации выглядит следующим образом:boost serialization: член обновления при десериализации

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

Когда объект десериализуется, я хочу, чтобы повторно создать распределение с этими параметрами (как по умолчанию строятся со средним значением 0 и стандом 1). Где я могу поместить этот код? В конструкторе?

Благодаря

+1

Вы можете разделить функции сохранения и загрузки (BOOST_SERIALIZATION_SPLIT_MEMBER), а в методе загрузки вы можете создать экземпляр дистрибутива после того, как у вас есть среднее значение и std. – Scottymac

ответ

1

Я не думаю, что текущая реализация normal_distribution сериализует, поскольку он не имеет средств, чтобы установить это значение после того, как это строительство.

Обойти можно выделить normal_distribution в куче и использовать заставки/загрузчик-шаблон вместо одного сериализации-функции, как она описана здесь: http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/tutorial.html#splitting

В загрузчике можно построить normal_distribution с новым и нагруженным параметры.

Смежные вопросы