2011-11-29 13 views
6

Ci scusiamo per il cross posting. Dopo aver postato sulla mailing list boost-users e una settimana senza alcuna risposta, sono propenso a pubblicare il problema su StackOverflow. originale Post, un po 'ri-editato:Compatibilità all'indietro della serializzazione vettoriale (de) con Boost.serialization

Ciao lista,

sto migrando da Boost v1.35 a una nuova versione. Ho, tuttavia, alcune stringhe serializzate legacy che voglio essere leggibile dalla nuova versione.

Dopo alcuni test ho scoperto che a quanto pare la versione più recente (in questo caso 1.40, ma anche in seguito) non può deserializzare correttamente le istanze std :: vector da 1,35 stringhe generate. Qualcuno può dare il mio un puntatore a quello che potrebbe essere il problema qui?

Grazie mille!

Ewald

dettagli == ==

io uso gli archivi di testo, e la versione gcc 4.4.1 (Ubuntu 4.4.1-4ubuntu9)

Il vettore di prova è una struttura con 2 elementi , le lunghe interi 1 e 2.

stringa Archivio per rispettive versioni lib:

1.35: archive: 22 serialization::archive 4 2 1 2
1.40: archive: 22 serialization::archive 5 2 0 1 2

Ora:

// 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); 
} 

Risultato durante l'esecuzione con v1.40 lib: testvector contiene due elementi, {2, 2} - invece di {1, 2}

Nota: s11n e de-s11n con la stessa versione di lib funziona perfettamente.

risposta

1

c'è un file boost/serialization/vector_135.hpp almeno in Boost 1.48 con questo commento:

vector_135.hpp: serializzazione per i modelli STL vettore per la compatibilità con il rilascio 1.35, che aveva un bug

I presumi di poterlo includere invece di boost/serialization/vector.hpp. Il rovescio della medaglia, ovviamente, è che anche i vettori appena serializzati si troveranno in quel formato buggy in quel caso.

EDIT:

breve studio del codice suggerisce se si utilizza il file, load() sarà in grado di deserializzare entrambi i formati, ma save() sarà serializzare nel nuovo formato. Quindi, l'unico lato negativo sembra essere brutto includere il nome quindi.

+0

Ho appena provato con Boost 1.47 e il vettore risultante è ancora {2, 2}. Questo è in qualche modo coerente con [questo biglietto] (https://svn.boost.org/trac/boost/ticket/2271). –

+0

_Il problema è che anche quando vector_135.hpp è incluso, non fa alcuna differenza perché non viene chiamato il metodo di caricamento appropriato_ - Inoltre non mi piace molto affidarmi a una patch di qualche tipo. –

+0

In Boost 1.48.0 vector_135.h, afferma esplicitamente che 1.35 non può essere compatibile con 1.36-1.40. Forse questo è un bug con 1.4.0 che non è documentato? –

Problemi correlati