Uso Boost.Serialization per serializzare una std :: map. Il codice è simile al seguenteLa serializzazione Boost serializza in modo diverso su piattaforme diverse?
void Dictionary::serialize(std::string & buffer)
{
try {
std::stringstream ss;
boost::archive::binary_oarchive archive(ss);
archive << dict_;
buffer = ss.str();
} catch (const std::exception & ex) {
throw DictionaryException(ex.what());
}
}
void Dictionary::deserialize(const char * const data, int length)
{
try {
namespace io = boost::iostreams;
io::array_source source(data, length);
io::stream<io::array_source> in(source);
boost::archive::binary_iarchive archive(in);
archive >> dict_;
} catch (const std::exception & ex) {
throw DictionaryException(ex.what());
}
}
ho compilato e testato il codice su un Mac Snow Leopard e su Ubuntu Lucid 10.04. C'è Boost 1.40 su entrambi i sistemi. Sul Mac ho costruito il codice da solo. Sulla scatola di Ubuntu ho ottenuto i binari tramite aptitude.
Problema: quando serializzo la mappa su Mac, non posso deserializzarla nella finestra di Ubuntu. Riceverò l'eccezione della firma non valida se provo.
Si noti che questo potrebbe avere un effetto molto significativo sulle prestazioni dell'applicazione. –