4

2 つのクライアントがメッセージ層の上で互いに通信する

メッセージ本文に、任意のデータ型を指すフィールドを含める必要があります

クライアント A から、フィールドを としてshared_ptr<TYPEA>メッセージ レイヤーに送信します。このフィールドをshared_ptr<void>メッセージ レイヤーの として定義します。shared_ptr<TYPEA>しかし、このフィールドをクライアント B に戻すにはどうすればよいでしょうか?

shared_ptr<void>または、メッセージ層で別のものとして定義する必要がありますか?

ありがとう

4

3 に答える 3

2

shared_ptrsとpointed-toデータが両方のクライアントに共通のメモリに保持されていない場合(たとえば、クライアントが異なるプロセスで実行され、データが共有メモリにない場合)、一方のクライアントからのポインタは、他の。指示されたデータの表現を作成し、それを送信する必要があります。受信者は、メッセージングレイヤーでデータの独自のコピーを作成し、shared_ptrをクライアントに渡します。

于 2010-04-19T23:41:06.730 に答える
2

boost::shared_ptr を使用している場合は、さまざまな XXX_ptr_cast<>() 関数 (static_ptr_cast、dynamic_ptr_cast...) を使用できます。

MSVC 2010 バージョンを使用している場合、これらの関数の実装を見つけることができませんでした。それらは標準の一部ではない場合があります。

于 2010-04-19T22:59:40.300 に答える
0

クライアント間で渡す予定のすべてのデータ型が共通の基本クラスから継承される場合、現在のインスタンスがどの派生型であるかを示すフラグ変数を基本クラスに含めるだけで済みます。クライアント間で基底クラス ポインターを渡し、使用dynamic_castして基底ポインターを適切な派生型にダウンキャストします。

于 2010-04-19T22:56:25.870 に答える