RTI DDS connext は初めてです。rti のいくつかの C++ の例 (Hello_dynamic、Hello_simple) を実行してみましたが、正常に動作しています。次に、C++ マップをトピック タイプとしてパブリッシャーからサブスクライバーに渡すことを考えました。 . ここで私を助けてください..??
1 に答える
C++ 標準マップ タイプは、トピック タイプとしてネイティブに使用できません。DDS は、OMG の IDL (Interface Definition Language) の定義済みサブセットによって表現できる任意の型を配布できますが、マップ型はその中にありません。
参照している 2 つのコード例は、組み込みの文字列型 (Hello_simple) または独自の動的データ API (Hello_dynamic) に依存しているため、一般的な状況ではありません。独自のデータ型を通常どのように定義するかをよりよく理解するには、Hello_idl の例を確認してください。これは、アプリケーションで使用される C++ 型に変換される、IDL で定義されたユーザー定義型を示しています。
Topic タイプを作成して、C++ マップと同様の機能を実現するのはかなり簡単です。マップ アイテムに文字列キーと長い値があると仮定すると、IDL の構造を使用してマップ内の単一のアイテムを表現できます。たとえば、次の型を使用します。
struct mapItem {
unsigned long m_mapId; //@key
string m_key; //@key
long m_value;
};
m-mapId
このアイテムが属するマップを示します。マップはmapItem
、同じm_mapId
値を持つすべての のコレクションです。フィールドm_key
とm_value
は明らかにキーと値のペアです。
パブリッシャー側では、アプリケーションはマップ エレメントを DDS に 1 つずつ書き込むことができます。m_mapId
との同じ値を持つ値はm_key
互いに上書きされ、標準マップで期待されるのと同じ動作になります。サブスクライバー側では、同じm_mapId
.
このアプローチを使用する場合、アプリケーション コードは標準マップを使用しません。これを実現するには、map(-like) API を対応する書き込みおよび読み取りアクションに変換するラッパー関数を作成する必要があります。
通常のデータベース設計に精通している場合は、リレーショナル データ モデルでこれを設計するときに行うことと類似していることに気付くでしょう。実際、DDS は、通常の DBMS と多くの類似点を持つ分散データ管理インフラストラクチャと見なすことができます。