C でのカスタム データ型メンバーを持つクラスのシリアル化
問題:
方法カスタム データ型の複数のメンバーを含むクラスを効率的にシリアル化および逆シリアル化しますか?
回答:
カスタム データ型を含むクラスを効率的にシリアル化および逆シリアル化するには、次の点を考慮してください。 :
推奨インターフェイス:
<code class="cpp">std::vector<uint8_t> serialize(Mango const& Man); Mango deserialize(std::span<uint8_t const>> data);</code>
実装:
<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>
カスタム データ型パーサーとジェネレーター:
これらは、カスタム データ型のシリアル化/逆シリアル化を処理します (詳細な例については、回答を参照してください)。
移植性:
追加メモ:
以上がC でカスタム データ型メンバーを含むクラスをシリアル化および逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。