Maison > développement back-end > C++ > Comment sérialiser et désérialiser des classes avec des membres de type de données personnalisés en C ?

Comment sérialiser et désérialiser des classes avec des membres de type de données personnalisés en C ?

Mary-Kate Olsen
Libérer: 2024-10-31 21:18:02
original
183 Les gens l'ont consulté

How to Serialize and Deserialize Classes with Custom Data Type Members in C  ?

Sérialisation de classes avec des membres de type de données personnalisés en C

Problème :

Comment faire vous sérialisez et désérialisez efficacement une classe contenant plusieurs membres de types de données personnalisés ?

Réponse :

Pour sérialiser et désérialiser efficacement une classe contenant des types de données personnalisés, considérez ce qui suit :

Interface suggérée :

<code class="cpp">std::vector<uint8_t> serialize(Mango const&amp; Man);
Mango                deserialize(std::span<uint8_t const>> data);</code>
Copier après la connexion

Implémentations :

<code class="cpp">std::vector<uint8_t> serialize(Mango const&amp; Man) {
    std::vector<uint8_t> bytes;
    do_generate(back_inserter(bytes), Man);
    return bytes;
}

Mango deserialize(std::span<uint8_t const> data) {
    Mango result;
    auto  f = begin(data), l = end(data);
    if (!do_parse(f, l, result))
        throw std::runtime_error("deserialize");
    return result;
}

void serialize_to_stream(std::ostream&amp; os, Mango const&amp; Man)  {
    do_generate(std::ostreambuf_iterator<char>(os), Man);
}

void deserialize(std::istream&amp; is, Mango&amp; 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

Analyseurs de types de données personnalisés et Générateurs :

Ceux-ci gèrent la sérialisation/désérialisation de vos types de données personnalisés (voir la réponse pour des exemples détaillés).

Portabilité :

  • Assurez-vous que l'endianité est cohérente si nécessaire.
  • Envisagez d'utiliser Boost Endian (en-tête uniquement) pour normaliser l'endianité multiplateforme.

Remarques supplémentaires :

  • Les types de données personnalisés doivent être facilement copiables pour une sérialisation efficace.
  • Évitez d'utiliser directement la sérialisation boost car elle nécessite une liaison.
  • Envisagez d'utiliser l'assistant suggéré pour l'en-tête uniquement. fonctions pour la flexibilité et l'efficacité.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal