是否必须为每个域参与者以相同的方式定义 DDS 主题?

Do DDS topics have to be defined the same way for every domain participant?

假设我在一个系统上将一个主题定义为这样的联合:

union MyType switch (letterId) {
    case a: TypeA typeA;
    case b: TypeB typeB;
    case c: TypeC typeC;
};

但是如果union是以TypeC形式发送的,另一个系统对这个话题不感兴趣。其实定义TypeC本身就有很大的依赖关系,直接省略会更方便。然后我可以在系统 2 中定义主题,因为它们仍然具有相同的名称吗?

union MyType switch (letterId) {
    case a: TypeA typeA;
    case b: TypeB typeB;
};

会不会根本不起作用?如果它能工作,当它收到 TypeC 时会发生什么?

不必以完全相同的方式为每个 DomainParticipant 定义主题。 OMG DDS-XTypes specification 描述了主题类型如何包含可选字段以及如何扩展或修改它们 - 或不。

为了匹配 DataWriters 和 DataReaders,它们的类型需要根据规范中的 7.2.4 类型兼容性 部分兼容。同一部分定义了有关如何在具有不同定义的兼容类型之间进行分配的规则。

对于联合类型,Table 中的第一行 7.17 - 聚合类型is-assignable-from 关系的定义 将告诉您可以做什么您的联合定义,同时保持不同版本之间的兼容性。

作为快速评估:7.2.2.4.4.5 可选成员 提到 联盟成员,包括鉴别器,永远不应是可选的 ,因此您可能需要针对您的特定情况找到创造性的解决方案。

请注意,并非所有 DDS 供应商都支持 XTypes 类型系统。