4

Linux パイプを使用してプロセス境界 (プロセス 1 からプロセス 2) を越えて送信する必要がある C++ のクラスのオブジェクトがある状況があります。C ++でシリアル化を行う方法をオンラインで検索しました。boostを見つけましたが、クラスにいくつかの変更が必要です。私の状況では、クラスを変更できません。

このクラスには多くのポインターがあり、ネストは 3 レベルまで続きます (クラス 1 にはクラス 2 型のポインター 1 があります -> クラス 2 にはクラス 3 型のポインター 2 があります -> クラス 3 にはクラス 4 型のポインター 3 があります -> クラス4)。2番目のプロセスで再作成できるように、パイプを使用してこのオブジェクトを送信する方法はありますか?

ありがとう。

4

3 に答える 3

2

何らかの方法でクラスをシリアル化する必要があります。どれだけ正確に選択するかは、、、、、JSONまたは任意XMLのバイナリ形式のような形式で行うことができます。クラスの詳細を確認しなければ、他に追加することはあまりありません。

別のオプションとして、共有メモリセグメントを使用してクラスを格納することも考えられますが、これにはポインター演算、同時実行性、およびその他の複雑な問題が伴います。

于 2012-10-24T02:10:12.537 に答える
1

Memento パターンの適用を検討しましたか? オブジェクトを (テキストまたはバイナリに) シリアル化する方法の詳細を処理するために、1 つまたは複数のクラスを作成できます。

オブジェクトを保存するために作成するクラスは、次のプロセスで選択するシリアル化形式から新しいオブジェクトをインスタンス化する方法も知っています。

于 2012-10-24T02:09:06.237 に答える
1

パイプなどを介してコピー構築できないため、ある種のシリアル化を行う必要があります。クラスを変更できない場合、唯一の選択肢は、最上位クラスのパブリック API を使用してすべての部分を取得し、そのデータをシリアル化する外部関数またはクラスを作成することです。次に、ストリームから再構築する必要があります。

于 2012-10-24T02:09:57.803 に答える