Здравствуйте, 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() нет необходимости
}
}