Обратная совместимость векторной (де)сериализации с Boost.serialization

Извините за перекрестный постинг. После публикации в списке рассылки boost-users и недели отсутствия ответов я склоняюсь к тому, чтобы опубликовать проблему на stackoverflow. Оригинальное сообщение, слегка отредактированное:

Привет, список,

Я перехожу с Boost v1.35 на новую версию. Однако у меня есть несколько сериализованных строк, которые я хочу, чтобы новая версия была читаема.

После некоторого тестирования я обнаружил, что, по-видимому, более новая версия (в данном случае 1.40, но также и более поздние) не может правильно десериализовать экземпляры std::vector из 1.35. сгенерированных строк. Может ли кто-нибудь подсказать мне, в чем может быть проблема?

Спасибо большое!

Ewald

==Детали==

Я использую текстовые архивы и gcc версии 4.4.1 (Ubuntu 4.4.1-4ubuntu9)

Тестовый вектор - это структура с 2 элементами, длинными целыми числами 1 и 2.

Архивная строка для соответствующих версий lib:

1.35: archive: 22 serialization::archive 4 2 1 2
1.40: archive: 22 serialization::archive 5 2 0 1 2

Сейчас:

// includes
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

std::vector<long> testvector;
std::string val = "22 serialization::archive 4 2 1 2"; // v1.35 archive
{
std::stringstream ss(std::stringstream::in | std::stringstream::out);
ss << val << std::endl;
boost::archive::text_iarchive ia(ss);
ia >> BOOST_SERIALIZATION_NVP(testvector);
}

Результат при выполнении с lib v1.40: testvector содержит два элемента, {2, 2} -- вместо {1, 2}

Примечание: s11n и de-s11n с той же версией lib работают идеально.

6
задан Ewald KeinNachname 29 November 2011 в 16:27
поделиться