précédemment mon programme utilisé pour sérialiser l'ensemble std::multimap<Participant*, Connection*>
après qu'il a été complètement rempli. et c'était simple arc & _connections
à la fois pour enregistrer et restaurer.boost serialization multimap manuellement
mais cela nécessite que chaque objet de connexion reste en mémoire. mais je n'ai pas besoin de ces objets pour autre chose que la sérialisation. Donc, pour minimiser la consommation de mémoire, il a décidé de sérialiser std::make_pair(connection->participant(), connection)
dès leur création. et supprimer après la sérialisation est terminée.
La taille attendue de multimap est connue avant le début du remplissage.
Ce que je veux est de sérialisation manuellement ces paires de telle sorte que je ne ai pas besoin de modifier le code désérialisation qui simplement arc & _connections;
de boost/serialization/collections_save_imp.hpp
Je vois
boost::serialization::save_construct_data_adl(
ar,
&(*it),
boost::serialization::version<BOOST_DEDUCED_TYPENAME Container::value_type>::value
);
ar << boost::serialization::make_nvp("item", *it++);
Alors dois-je besoin d'utiliser quelque chose comme
typedef std::pair<Participant*, Connection*> PairT;
ar << BOOST_SERIALIZATION_NVP(expected_size);
if(3 < ar.get_library_version()){// I don't really understand this magic number here
const unsigned int item_version = boost::serialization::version<PairT>::value;
ar << BOOST_SERIALIZATION_NVP(item_version);
}
PairT pair = std::make_pair(connection->participant(), connection);
boost::serialization::save_construct_data_adl(
ar,
pair,
boost::serialization::version<PairT>::value
);
ar << boost::serialization::make_nvp("item", pair);
delete connection;
Je ne sais pas exactement comment cela doit être fait. juste faire des suppositions.