gpt4 book ai didi

c++ - 如何将 C++ 映射传递到 RTI DDS connext 发布者并在 RTI 订阅者处接收

转载 作者:太空狗 更新时间:2023-10-29 21:23:37 25 4
gpt4 key购买 nike

我是 RTI DDS connext 的新手。我尝试运行 rti 的一些 C++ 示例(Hello_dynamic、Hello_simple),它们工作正常。然后我想到将 C++ 映射作为主题类型从发布者传递给订阅者。但我猜他们没有文档和示例代码可用于执行此操作.请在这里帮助我..??

最佳答案

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

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

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

struct mapItem {
unsigned long m_mapId; //@key
string m_key; //@key
long m_value;
};

m-mapId 表示该项目属于哪个 map 。您的 map 是具有相同 m_mapId 值的所有 mapItem 的集合。字段m_keym_value 显然是键值对。

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

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

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

关于c++ - 如何将 C++ 映射传递到 RTI DDS connext 发布者并在 RTI 订阅者处接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17841687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com