Извините за перекрестную публикацию.После публикации в рассылке boost-users и одной недели без каких-либо ответов я склонен опубликовать проблему в stackoverflow.Исходное сообщение, слегка отредактированное:
Привет список,
Я перехожу с Boost v1.35 на новую версию.Однако у меня есть некоторые унаследованные сериализованные строки, которые я хочу, чтобы они были доступны для чтения новой версией.
После некоторого тестирования я обнаружил, что, по-видимому, более новая версия (в данном случае 1.40, но и позже) не может правильно десериализовать std:: векторные экземпляры из 1,35 сгенерированных строк.Кто-нибудь может дать мне указатель на то, в чем может быть проблема здесь?
Большое спасибо!
Эвальд
== Подробности ==
Iиспользуйте текстовые архивы и gcc версии 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
Тестовый вектор - это структура с 2 элементами, длинными целыми числами 1 и 2.
Строка архива длясоответствующие версии библиотеки:
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);
}
Результат при выполнении с библиотекой v1.40: testvectorсодержит два элемента, {2, 2}
- вместо {1, 2}
Примечание: s11n и de-s11n с одинаковой версией lib работают отлично.