部分的なシリアル化をサポートするC ++シリアル化ライブラリ? [閉まっている]
-
05-07-2019 - |
質問
部分的なシリアル化をサポートする既存のC ++シリアル化ライブラリはありますか?
「部分的なシリアル化」によるつまり、3つの特定のメンバーの値を保存し、後でその保存されたコピーを別のインスタンスに適用できるようにしたいということです。これら3人のメンバーのみを更新し、他のメンバーはそのままにしておきます。
これは、ネットワークを介したデータの同期に役立ちます。クライアントとサーバーにオブジェクトがあり、サーバーでメンバーが変更されたときに、そのメンバーの更新された値を含むメッセージをクライアントに送信したいとします。そのメンバーのみ。オブジェクト全体のコピーをネットワーク経由で送信したくありません。
boost :: serialization
の外観は一見すべてまたは何もサポートしません。
編集:もともとこれを書いてから3年後、私はそれを振り返って自分自身に言った。 boost :: serializationを使用すると、保存するメンバーまたは保存しないメンバーを定義できるため、説明したように「部分的なシリアル化」をサポートします。さらに、C ++にはリフレクションシリアル化ライブラリがないため、ソースファイルを解析するための何らかの外部ツールが付属していないか、C ++コードの生成に使用される別の入力ファイル形式がない限り、保存する各メンバーを明示的に指定する必要があります(例:プロトコルバッファの機能)。これを書いたとき、私は概念的に混乱していたに違いないと思います。
解決
ここでは、明らかにシリアル化を探していません。
シリアル化とは、オブジェクトを保存してから、バイトストリームからオブジェクトを再作成することです。ビデオゲームの保存やWebサーバーのセッションコンテキストについて考えてください。
ここで必要なのはメッセージングです。 GoogleのFlatBuffers はそのために便利です。オプションとしてすべての単一フィールドを含むメッセージを指定し、メッセージの受信時に、存在するフィールドでオブジェクトを更新し、他のフィールドはそのままにします。
FlatBuffersの素晴らしい点は、ゼロコストの解析ステップに加えて、前方互換性と後方互換性、テキストおよびバイナリエンコーディング(デバッグに最適なテキスト、純粋なパフォーマンスに優れたバイナリ)をうまく処理できることです。
さらに、メッセージをどこかに保存し、それを検査するためにhtml guiを一緒に送りたい場合は、別の言語(たとえばpythonやruby)でメッセージをデコードすることもできます!
他のヒント
私はそれらに精通していませんが、 Googleもチェックアウトできます。プロトコルバッファ 。