Извините за перекрестный постинг. После публикации в списке рассылки 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 работают идеально.