2011-11-29 29 views
6

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.

Respuesta

1

hay un archivo boost/serialization/vector_135.hpp al menos en 1,48 Boost con este comentario:

vector_135.hpp: serialización para las plantillas STL vector para la compatibilidad con la versión 1.35, que tenía un error

I supongamos que puede incluirlo en lugar de boost/serialization/vector.hpp. La desventaja, por supuesto, es que los nuevos vectores serializados también estarán en ese formato de errores en ese caso.

EDIT:

Breve estudio del código sugiere que si se utiliza el archivo, load() podrá deserializar ambos formatos, pero save() serializará en el nuevo formato. Entonces, el único inconveniente parece ser feo incluir nombre entonces.

+0

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). –

+0

_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. –

+0

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? –

Cuestiones relacionadas