структуры данных — Как передать карту C ++ в RTI DDS Connext Publisher и получить на RTI Subscriber

Я новичок в RTI DDS Connext. Я попытался запустить некоторые примеры C ++ (Hello_dynamic, Hello_simple) из rti, и они работали нормально. Затем я подумал о передаче карты C ++ в качестве типа темы от издателя к подписчику. Но я думаю, что для этого нет документации, и примеры кодов доступны для этого. , Пожалуйста, помогите мне здесь .. ??

3

Решение

Стандартный тип карты C ++ нельзя изначально использовать в качестве типа темы. DDS может распространять любой тип, который может быть выражен определенным подмножеством IDL OMG (Язык определения интерфейса), и тип карты не относится к этому.

Два примера кода, на которые вы ссылаетесь, не являются типичной для вас ситуацией, поскольку они основаны на встроенном строковом типе (Hello_simple) или собственном API динамических данных (Hello_dynamic). Чтобы лучше понять, как вы обычно определяете свои собственные типы данных, посмотрите пример Hello_idl. Он показывает определенный пользователем тип, определенный в IDL, который переводится в тип C ++ для использования вашим приложением.

Было бы довольно легко создать тип темы для достижения функциональности аналогичный на карту 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 по одному. Значения с одинаковыми значениями для m_mapId а также m_key перезапишут друг друга, что приведет к тому же поведению, что и для стандартных карт. На стороне подписчика можно создать полную карту, запросив у устройства чтения данных все mapItems с одинаковыми m_mapId,

Код вашего приложения не будет использовать стандартные карты при использовании этого подхода. Чтобы достичь этого, вам нужно будет создать функции-обертки, которые преобразуют API-интерфейс карты в соответствующие действия записи и чтения.

Если вы знакомы с обычными проектами баз данных, вы заметите сходство с тем, что вы будете делать, проектируя их в реляционной модели данных. Действительно, DDS можно считать распределенной инфраструктурой управления данными, которая во многом похожа на обычные СУБД.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]