Parler de la sérialisation, le boost de la sérialisation de l'API vient à mon esprit. Comme pour la transmission de données sérialisées sur le net, je préfère utiliser les sockets Berkeley ou de l' asio de la bibliothèque.
Edit:
Si vous souhaitez sérialiser vos objets à un tableau d'octets, vous pouvez utiliser le boost sérialiseur de la manière suivante (extrait du tutoriel du site):
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
class gps_position
{
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & degrees;
ar & minutes;
ar & seconds;
}
int degrees;
int minutes;
float seconds;
public:
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};
Réelle, la sérialisation est alors assez facile:
#include <fstream>
std::ofstream ofs("filename.dat", std::ios::binary);
// create class instance
const gps_position g(35, 59, 24.567f);
// save data to archive
{
boost::archive::binary_oarchive oa(ofs);
// write class instance to archive
oa << g;
// archive and stream closed when destructors are called
}
La désérialisation fonctionne de manière analogique.
Il y a aussi des mécanismes qui permettent de gérer la sérialisation des pointeurs (structures de données complexes comme des arbres, etc ne sont pas un problème), les classes dérivées et vous pouvez choisir entre le binaire et le texte de la sérialisation. En plus de tous les conteneurs STL sont pris en charge hors de la boîte.