2011-05-16 19 views
5

Obtuve esta excepción cuando intento deserializar a través de un archivo de texto algunos datos previamente serializados con una versión superior de boost (1.46 para serializar y 1.38 para deserializar) ... es hay una forma de degradar (en el código) la serialización? algo así como "set_library_version"? Gracias ...Boost serialización: excepción de archivo "versión no compatible"

Respuesta

4

Ver Error read binary archive, created by old boost version correo sobre el error de serialización.

Se dice que el código de abajo hace el trabajo

void load_override(version_type & t, int version){ 
     library_version_type lvt = this->get_library_version(); 
     if(boost::archive::library_version_type(7) < lvt){ 
      this->detail_common_iarchive::load_override(t, version); 
     } 
     else 
     if(boost::archive::library_version_type(6) < lvt){ 
      uint_least16_t x=0; 
      * this->This() >> x; 
      t = boost::archive::version_type(x); 
     } 
     else 
     if(boost::archive::library_version_type(3) == lvt || boost::archive::library_version_type(5) == lvt){ 
#pragma message("CTMS fix for serialization bug (lack of backwards compatability) introduced by boost 1.45.") 
      // upto 255 versions 
      unsigned char x=0; 
      * this->This() >> x; 
      t = version_type(x); 
     } 
     else{ 
      unsigned int x=0; 
      * this->This() >> x; 
      t = boost::archive::version_type(x); 
     } 
    } 
+0

primer lugar, gracias por su respuesta ... pero en realidad no utilizan cargar/guardar la función, sino una función única llamada serializar .. .como el ejemplo de serialización de impulso ... ¿cómo puedo hacer? – marco

+0

El enlace habla de eso. Dice que la compatibilidad con versiones anteriores está rota "Antes de 1.44, la versión de archivo se escribía como" un byte ". Comenzando por 1.44, el tipo de versión de archivo cambiaba de 'version_type' a 'library_version_type' y se espera que se lea como dos bytes. enlace cuidadoso y recompile usando el código que pegué. Creo que esta es la única solución. –

Cuestiones relacionadas