"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-11
Parcourir:570

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

L'objectif est de sérialiser et de 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 éléments suivants fonctions :

std::vector serialize(Mango const& Man);
Mango                deserialize(std::span data);

void serialize_to_stream(std::ostream& os, Mango const& Man);
void deserialize(std::istream& is, Mango& Man);

Personnalisations pour les types de données

Les personnalisations sont requises pour tous les types pertinents (y compris ValType, FuntionMango, MangoType et Mango) :

// Define `do_generate` and `do_parse` functions
// for custom data types.

Exemple d'implémentation

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

void deserialize(std::istream& is, Mango& Man) {
    Man = {}; // clear it!
    std::istreambuf_iterator f(is), l{};
    if (!do_parse(f, l, Man))
        throw std::runtime_error("deserialize");
}

Considérations sur la portabilité

  • L'endianisme devra peut-être être normalisé, 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 de stocker et de transférer efficacement les données entre différents processus ou systèmes.

Exemple en direct :

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3