Я новичок в RTI DDS Connext. Я попытался запустить некоторые примеры C ++ (Hello_dynamic, Hello_simple) из rti, и они работали нормально. Затем я подумал о передаче карты C ++ в качестве типа темы от издателя к подписчику. Но я думаю, что для этого нет документации, и примеры кодов доступны для этого. , Пожалуйста, помогите мне здесь .. ??
Стандартный тип карты 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 можно считать распределенной инфраструктурой управления данными, которая во многом похожа на обычные СУБД.
Других решений пока нет …