Bibliothèque de sérialisation C ++ prenant en charge la sérialisation partielle?

Existe-t-il de bonnes bibliothèques de sérialisation C ++ existantes qui prennent en charge la sérialisation partielle?

Par “sérialisation partielle”, je veux dire que je pourrais vouloir sauvegarder les valeurs de 3 membres spécifiques et pouvoir ensuite appliquer cette copie sauvegardée à une instance différente. Je voudrais seulement mettre à jour ces 3 membres et laisser les autres intacts.

Cela serait utile pour synchroniser des données sur un réseau. Supposons que j’ai un object sur un client et un serveur, et lorsqu’un membre change sur le serveur, je souhaite envoyer au client un message contenant la valeur mise à jour pour ce membre et ce membre uniquement . Je ne veux pas envoyer une copie de l’object entier sur le fil.

boost::serialization en un coup d’œil semble ne supporter que tout ou rien.

Edit: 3 ans après avoir écrit ceci, j’y repense et me dis, ‘wut?’ boost :: serialization vous permet de définir quels membres vous voulez enregistrer ou non, donc il prend en charge la ‘sérialisation partielle’ comme je semble l’avoir décrite. De plus, étant donné que C ++ manque de bibliothèques de sérialisation par reflection, vous devez spécifier explicitement chaque membre que vous enregistrez, à moins qu’il ne vienne avec un outil externe permettant d’parsingr les fichiers source ou disposant d’un format de fichier d’entrée distinct utilisé pour générer du code C ++ (par exemple ce que fait les tampons de protocole). Je pense que j’ai dû être confuse sur le plan conceptuel lorsque j’ai écrit ceci.

Vous ne cherchez clairement pas la sérialisation ici.

La sérialisation consiste à enregistrer un object, puis à le recréer à partir du stream d’octets. Pensez aux sauvegardes de jeux vidéo ou au contexte de session d’un serveur Web.

Ici, vous avez besoin de messagerie. Les FlatBuffers de Google sont bien pour ça. Spécifiez un message qui contiendra tous les champs de manière facultative. Dès réception du message, mettez à jour votre object avec les champs existants et laissez les autres intacts.

L’avantage de FlatBuffers est qu’il gère parfaitement la compatibilité ascendante et descendante, ainsi que l’encodage de texte et binary (le texte est excellent pour le débogage et le binary pour les performances pures), en plus d’une étape d’parsing à coût nul.

Et vous pouvez même décoder les messages avec une autre langue (python ou ruby, par exemple) si vous les enregistrez quelque part et souhaitez créer un gui html permettant de l’inspecter!

Bien que je ne les connaisse pas, vous pouvez également consulter les tampons de protocole de Google .