Как передать любой объект, используя 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. Я работал над такой вещью, дальнейший прогресс будет представлен здесь позже.

Другие вопросы по тегам