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