Re[4]: Уменьшить объем сериализации
От: Vinick Россия  
Дата: 20.06.08 07:38
Оценка:
Здравствуйте, k732, Вы писали:

K>тоесть для сериализации понятно: если version = 0, то сериализуем весь объект, иначе только среднее значение (int)

K>А вот при десереализации если 0, то опять весь контейнер, а вот если не 0, то нужно как-то проинициализировать объект руками.

K>Вот здесь я просто не понял как

Не совсем понятно зачем инициализировать то что получателю не требуется. Может проще ввести в Averager поле m_avg и какой-нибудь флаг сигнализирующий о валидности этого поля.
Но если очень хочется иметь заполненый контейнер, то так:
    template<class Archive>
    void save (Archive& archive, const unsigned int version) const
    {
        archive & version;
                archive & m_time;
                if(!version)
                   archive & m_values;
                else
                  {
                     archive & m_values.deque_size();
                     archive & m_values.avg();
                  }
    }
    template<class Archive>
    void load (Archive& archive, const unsigned int)
    {
                int version;
                archive & version;
        archive & m_time;
                if(!version)
                     archive & m_values;
                else
                   {
                       uint sz;
                       double avg;
                       archive & sz;
                       archive & avg;
                       m_values.avg(sz);
                       std::fill_(std::ostream_iterator<double>(m_values),sz,avg);
                       // или если сохранение размера не важно m_values << avg,
                       // тогда передавать m_values.deque_size() нет необходимости
                    }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.