我是RTI DDS connext的新手。我尝试运行rti的一些C++示例(Hello_dynamic,Hello_simple),并且它们运行良好。然后我想到了将C++映射作为Topic类型从发布者传递到Subscriber。但是我想它们没有文档,示例代码可用于执行此操作。请在这里帮助我.. ??

最佳答案

C++标准映射类型本身不能用作主题类型。 DDS可以分发可以由OMG的IDL(接口(interface)定义语言)的已定义子集表示的任何类型,而映射类型不在其中。

您所引用的两个代码示例不是您的典型情况,因为它们依赖于内置字符串类型(Hello_simple)或专有动态数据API(Hello_dynamic)。为了更好地了解您通常如何定义自己的数据类型,请查看Hello_idl示例。它显示了IDL中定义的用户定义类型,该类型已转换为C++类型供您的应用程序使用。

创建Topic类型以实现类似于C++映射的功能将是相当容易的。假设您的 map 项具有字符串键和长值,那么您可以使用IDL中的结构来表示 map 中的单个项,例如,使用以下类型:

struct mapItem {
    unsigned long m_mapId; //@key
    string m_key;          //@key
    long   m_value;
};
m-mapId指示该项目所属的 map 。您的 map 是具有相同mapItem值的所有m_mapId的集合。字段m_keym_value显然是键值对。

在发布者方面,您的应用程序可以将 map 元素一张一张地写入DDS。 m_mapIdm_key的值相同的值将相互覆盖,从而导致与标准映射相同的行为。在订户端,可以通过向数据读取器查询具有相同m_mapId的所有mapItem来构建完整的 map 。

使用这种方法时,您的应用程序代码将不会使用标准映射。为了实现这一点,您将必须创建包装器函数,以将类似map(-)的API转换为相应的写入和读取操作。

如果您熟悉常规的数据库设计,您会注意到与在关系数据模型中进行设计时的相似之处。实际上,DDS可以被认为是一种分布式数据管理基础架构,与常规DBMS-es有很多相似之处。

关于c++ - 如何将C++ Map传递到RTI DDS connext Publisher并在RTI Subscriber上接收,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17841687/

10-11 04:45