Maison > développement back-end > C++ > le corps du texte

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
433 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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!