Lo siento por la publicación cruzada. Después de publicar en la lista de correo boost-users y una semana sin ninguna respuesta, me inclino a publicar el problema en stackoverflow. Post original, ligeramente re-editado:Compatibilidad con versiones anteriores de la serialización de vector (de) con Boost.serialization
lista Hola,
estoy migrando desde v1.35 impulso a una nueva versión. Sin embargo, tengo algunas series serializadas heredadas de que quiero que sean leíbles con la nueva versión.
Después de algunas pruebas, descubrí que aparentemente la versión más reciente (en este caso, 1.40 pero también posterior) no puede deserializar correctamente las instancias std :: vector desde 1.35 cadenas generadas. ¿Alguien puede dar mi puntero en lo que puede ser el problema aquí?
¡Muchas gracias!
Ewald
Detalles == ==
utilizo archivos de texto, y la versión de gcc 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
El vector de prueba es una estructura con 2 artículos , los enteros largos 1 y 2.
cadena Archive for respectivas versiones lib:
1.35: archive: 22 serialization::archive 4 2 1 2
1.40: archive: 22 serialization::archive 5 2 0 1 2
Ahora:
// 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);
}
Resultado al ejecutar con v1.40 lib: testvector contiene dos elementos, {2, 2}
- En lugar de {1, 2}
Nota: s11n y DE-s11n con la misma versión de lib funciona perfecta.
Acabo de probarlo con Boost 1.47 y el vector resultante sigue siendo {2, 2}. Esto es de alguna manera consistente con [este ticket] (https://svn.boost.org/trac/boost/ticket/2271). –
_El problema es que incluso cuando vector_135.Se incluye hpp, no hace ninguna diferencia porque no se llama el método de carga adecuado_. Tampoco estoy muy interesado en confiar en un parche de algún tipo. –
En Boost 1.48.0 vector_135.h, establece explícitamente que 1.35 no puede ser compatible con 1.36-1.40. Tal vez este es un error con 1.4.0 que no está documentado? –