Maison > développement back-end > C++ > Comment sérialiser et désérialiser une classe C avec des types de données personnalisés ?

Comment sérialiser et désérialiser une classe C avec des types de données personnalisés ?

DDD
Libérer: 2024-10-30 05:39:03
original
590 Les gens l'ont consulté

How to Serialize and Deserialize a C   Class with Custom Data Types?

Comment faire la sérialisation d'une classe ayant des membres de types de données personnalisés en C ?

Problème

Le but est de sérialiser et désérialiser une classe C Mango qui contient des membres de types de données personnalisés.

Implémentation

L'implémentation suggérée comprend les fonctions suivantes :

<code class="cpp">std::vector<uint8_t> serialize(Mango const& Man);
Mango                deserialize(std::span<uint8_t const> data);

void serialize_to_stream(std::ostream& os, Mango const& Man);
void deserialize(std::istream& is, Mango& Man);</code>
Copier après la connexion

Personnalisations pour les types de données

Personnalisations sont requis pour tous les types pertinents (y compris ValType, FuntionMango, MangoType et Mango) :

<code class="cpp">// Define `do_generate` and `do_parse` functions
// for custom data types.</code>
Copier après la connexion

Exemple de mise en œuvre

<code class="cpp">void serialize_to_stream(std::ostream& os, Mango const& Man) {
    do_generate(std::ostreambuf_iterator<char>(os), Man);
}

void deserialize(std::istream& is, Mango& Man) {
    Man = {}; // clear it!
    std::istreambuf_iterator<char> f(is), l{};
    if (!do_parse(f, l, Man))
        throw std::runtime_error("deserialize");
}</code>
Copier après la connexion

Considérations sur la portabilité

  • Endianness Il peut être nécessaire de normaliser, ce qui peut être fait manuellement ou à l'aide d'une bibliothèque comme Boost Endian (en-tête uniquement).

Notes supplémentaires

  • Cette approche permet aux données d'être stocké et transféré efficacement entre différents processus ou systèmes.

Exemple en direct :

https://coliru.stacked-crooked.com/a/288829ec964a3ca9

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal