Здравствуйте, Vinick, Вы писали:
V>Здравствуйте, k732, Вы писали:
K>>тоесть для сериализации понятно: если version = 0, то сериализуем весь объект, иначе только среднее значение (int)
K>>А вот при десереализации если 0, то опять весь контейнер, а вот если не 0, то нужно как-то проинициализировать объект руками.
K>>Вот здесь я просто не понял как
V>Не совсем понятно зачем инициализировать то что получателю не требуется. Может проще ввести в Averager поле m_avg и какой-нибудь флаг сигнализирующий о валидности этого поля.
V>Но если очень хочется иметь заполненый контейнер, то так:
V>V> template<class Archive>
V> void save (Archive& archive, const unsigned int version) const
V> {
V> archive & version;
V> archive & m_time;
V> if(!version)
V> archive & m_values;
V> else
V> {
V> archive & m_values.deque_size();
V> archive & m_values.avg();
V> }
V> }
V> template<class Archive>
V> void load (Archive& archive, const unsigned int)
V> {
V> int version;
V> archive & version;
V> archive & m_time;
V> if(!version)
V> archive & m_values;
V> else
V> {
V> uint sz;
V> double avg;
V> archive & sz;
V> archive & avg;
V> m_values.avg(sz);
V> std::fill_(std::ostream_iterator<double>(m_values),sz,avg);
V> // или если сохранение размера не важно m_values << avg,
V> // тогда передавать m_values.deque_size() нет необходимости
V> }
V> }
V>
спасибо. я правда уже немного по-другому сделал
template<class Archive>
void save (Archive& archive, const unsigned int version) const
{
archive << m_time;
if (version)
{
TAverager temp (1);
temp << m_values.avg();
archive << temp;
}
else archive << m_power;
}
template<class Archive>
void load (Archive& archive, const unsigned int version)
{
archive >> m_time;
if (version)
{
TAverager temp (1);
archive >> temp;
m_values << temp.avg();
}
else archive >> m_power;
}
я так понимаю, что осталось выбрать версию
BOOST_SERIALIZATION_SPLIT_MEMBER()
...
BOOST_CLASS_VERSION (Item, 1)
но получается, что это на этапе компиляции. Тоесть при сериализации всегда пойдет только усредненное значение.
А можно ли на этапе выполнения выбирать ?