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& Man); Mango deserialize(std::span<uint8_t const>> data);</code>
Implémentations :
<code class="cpp">std::vector<uint8_t> serialize(Mango const& 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& 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>
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é :
Remarques supplémentaires :
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!