Serialisierung von Klassen mit benutzerdefinierten Datentypmitgliedern in C
Problem:
Wie geht das? Sie serialisieren und deserialisieren Sie effizient eine Klasse, die mehrere Mitglieder benutzerdefinierter Datentypen enthält?
Antwort:
Um eine Klasse, die benutzerdefinierte Datentypen enthält, effizient zu serialisieren und deserialisieren, beachten Sie Folgendes :
Empfohlene Schnittstelle:
<code class="cpp">std::vector<uint8_t> serialize(Mango const& Man); Mango deserialize(std::span<uint8_t const>> data);</code>
Implementierungen:
<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>
Benutzerdefinierte Datentypen-Parser und Generatoren:
Diese übernehmen die Serialisierung/Deserialisierung Ihrer benutzerdefinierten Datentypen (siehe Antwort für detaillierte Beispiele).
Portabilität:
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonWie serialisiere und deserialisiere ich Klassen mit benutzerdefinierten Datentypmitgliedern in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!