ホームページ > バックエンド開発 > C++ > カスタム データ型を使用して C クラスをシリアル化および逆シリアル化する方法は?

カスタム データ型を使用して C クラスをシリアル化および逆シリアル化する方法は?

DDD
リリース: 2024-10-30 05:39:03
オリジナル
501 人が閲覧しました

How to Serialize and Deserialize a C   Class with Custom Data Types?

C でカスタム データ型のメンバーを持つクラスをシリアル化するにはどうすればよいですか?

問題

目的は、C クラスをシリアル化および逆シリアル化することです。カスタム データ型のメンバーを含む Mango。

実装

推奨される実装には次の関数が含まれます。

<code class="cpp">std::vector<uint8_t> serialize(Mango const& Man);
Mango                deserialize(std::span<uint8_t const> data);

void serialize_to_stream(std::ostream& os, Mango const& Man);
void deserialize(std::istream& is, Mango& Man);</code>
ログイン後にコピー

データ型のカスタマイズ

カスタマイズ関連するすべての型 (ValType、FuntionMango、MangoType、Mango を含む) に必要です:

<code class="cpp">// Define `do_generate` and `do_parse` functions
// for custom data types.</code>
ログイン後にコピー

実装例

<code class="cpp">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>
ログイン後にコピー

移植性に関する考慮事項

  • エンディアン正規化が必要な場合がありますが、これは手動で行うことも、Boost Endian (ヘッダーのみ) などのライブラリを使用して行うこともできます。

補足

  • このアプローチにより、データを異なるプロセスまたはシステム間で効率的に保存および転送されます。

実際の例:

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

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート