C でカスタム データ型メンバーを含むクラスをシリアル化および逆シリアル化する方法

Mary-Kate Olsen
リリース: 2024-10-31 21:18:02
オリジナル
125 人が閲覧しました

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

C でのカスタム データ型メンバーを持つクラスのシリアル化

問題:

方法カスタム データ型の複数のメンバーを含むクラスを効率的にシリアル化および逆シリアル化しますか?

回答:

カスタム データ型を含むクラスを効率的にシリアル化および逆シリアル化するには、次の点を考慮してください。 :

推奨インターフェイス:

<code class="cpp">std::vector<uint8_t> serialize(Mango const&amp; Man);
Mango                deserialize(std::span<uint8_t const>> data);</code>
ログイン後にコピー

実装:

<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>
ログイン後にコピー

カスタム データ型パーサーとジェネレーター:

これらは、カスタム データ型のシリアル化/逆シリアル化を処理します (詳細な例については、回答を参照してください)。

移植性:

  • 必要に応じて、エンディアンが一貫していることを確認します。
  • クロスプラットフォームのエンディアンを正規化するには、ブースト エンディアン (ヘッダーのみ) の使用を検討してください。

追加メモ:

  • 効率的なシリアル化のために、カスタム データ型は簡単にコピーできる必要があります。
  • リンクが必要なため、ブースト シリアル化を直接使用することは避けてください。
  • 推奨されるヘッダーのみのヘルパーの使用を検討してください。柔軟性と効率性を高める機能。

以上がC でカスタム データ型メンバーを含むクラスをシリアル化および逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!