Как передать любой объект, используя openDDS?
Я использую openDDS pub/sun middleware. Я проверил openDDS, используя сложную структуру.
например
typedef struct DSMD
{
string a;
long b;
} StandByModeData;
struct DSMCD{
string SessionId;
DSMD Data;
};
но теперь у меня есть другая структура. которая передается через openDDS.
Как я могу использовать шаблон в структуре idl?
Мне нужно что-то подобное
template <struct T>
struct array {
T typr;
};
3 ответа
Это то, что в настоящее время невозможно с OpenDDS. IDL3+ определяет шаблонные модули, что похоже на ваш пример, но, насколько я знаю, не поддерживается OpenDDS или любым другим поставщиком DDS.
Вы можете создать свой собственный тип сообщения VMF (переменный формат сообщения). Код, над которым я сейчас работаю, использует эту концепцию для передачи сообщений между узлами / участниками с помощью eprosima FastDDS. Один и тот же файл idl можно использовать для OpenDDS и FastDDS. В некоторых случаях мы используем обе реализации DDS одновременно.
@topic
struct VariableMessageType
{
/* Message id */
long msg_id;
/* Number of bytes in the data vector */
/* units: none */
long num_bytes;
/* num_bytes sized array of bytes */
/* units: none */
sequence<octet> data;
};
Fast-RTPS от eProsima может поддерживать большое количество типов данных с использованием DDS, также известного как построитель динамических типов, некоторые примеры динамического построителя можно найти здесь, а репозиторий github - по https://github.com/eProsima/Fast-RTPS. IMHO, когда тип данных поддерживает тип std::string, он может поддерживать любой тип данных, поскольку std::string - универсальный выбор. Для неопределенного типа данных вы можете преобразовать данные в строку в формате json для передачи через DDS. Я работал над такой вещью, дальнейший прогресс будет представлен здесь позже.