当前位置: 首页 > backend >正文

【FastDDS】XTypes Extensions

XTypes 扩展

1. 概述

本节将介绍 XTypes 规范中定义的 QoS 策略扩展。

2. 数据表示 QoS 策略(DataRepresentationQosPolicy)

此 XTypes QoS 策略规定了 DataWriter 和 DataReader 将要使用的数据表示形式。

DataWriter 会提供一种数据表示形式,用于与匹配的 DataReader 进行通信。DataReader 可以请求一种或多种数据表示形式,并且为了能与 DataWriter 进行通信,DataWriter 所提供的数据表示形式需要包含在 DataReader 的请求中。详见 <DataRepresentationQosPolicy>

2.1 QoS 策略数据成员列表

数据成员名称类型默认值DataReader 默认值DataWriter 默认值Topic 默认值
m_valuestd::vector空向量[XCDR_DATA_REPRESENTATION, XCDR2_DATA_REPRESENTATION][XCDR2_DATA_REPRESENTATION][XCDR_DATA_REPRESENTATION]

2.2 注意事项

此 QoS 策略适用于 Topic、DataReader 和 DataWriter 实体。它不能在已启用的实体上更改。

2.3 DataRepresentationId

有三个可能的值(参见 <DataRepresentationId>):

  • XCDR_DATA_REPRESENTATION:此选项对应于扩展 CDR 表示编码的第一个版本。
  • XML_DATA_REPRESENTATION:此选项对应于 XML 数据表示形式。
  • XCDR2_DATA_REPRESENTATION:此选项对应于扩展 CDR 表示编码的第二个版本。

2.4 示例

2.4.1 C++
// 此示例使用 DataWriter,但它也可应用于 Topic 实体。
// DataReader 的 DataRepresentationQosPolicy 包含在 TypeConsistencyQos 中
//(有关更多详细信息,请参见 TypeConsistencyQos 部分)。DataWriterQos writer_qos;// 将 XCDR v1 数据表示形式添加到有效表示形式列表中
writer_qos.representation().m_value.push_back(DataRepresentationId_t::XCDR_DATA_REPRESENTATION);// 将 XML 数据表示形式添加到有效表示形式列表中
writer_qos.representation().m_value.push_back(DataRepresentationId_t::XML_DATA_REPRESENTATION);// 在相应实体的创建中使用修改后的 QoS
writer_ = publisher_->create_datawriter(topic_, writer_qos);
2.4.2 XML

目前,此 QoS 策略无法使用 XML 进行配置。

3. 类型一致性实施 QoS 策略(TypeConsistencyEnforcementQosPolicy)

警告
此 QoS 策略将在未来版本中实现。

此 XTypes QoS 策略扩展定义了用于确定 DataWriter 中使用的数据类型与 DataReader 中使用的数据类型是否一致的规则。参见 <TypeConsistencyEnforcementQosPolicy>

3.1 QoS 策略数据成员列表

数据成员名称类型默认值
m_kindTypeConsistencyKindALLOW_TYPE_COERCION
m_ignore_sequence_boundsbooltrue
m_ignore_string_boundsbooltrue
m_ignore_member_namesbooltrue
m_prevent_type_wideningbooltrue
m_force_type_validationbooltrue

3.2 成员说明

  • m_kind:确定 DataWriter 类型中的类型是否必须与 DataReader 中的类型相等。有关更多详细信息,请参见 TypeConsistencyKind。
  • m_ignore_sequence_bounds:此数据成员控制在类型可赋值性中是否考虑序列边界。如果其值为 true,则不考虑序列的最大长度,这意味着长度为 L2 的序列 T2 可赋值给长度为 L1 的序列 T1,即使 L2 大于 L1。但如果为 false,则 L1 必须大于或等于 L2 才能认为序列是可赋值的。
  • m_ignore_string_bounds:控制在类型赋值中是否考虑字符串边界。如果其值为 true,则不考虑字符串的最大长度,这意味着长度为 L2 的字符串 S2 可赋值给长度为 L1 的字符串 S1,即使 L2 大于 L1。但如果为 false,则 L1 必须大于或等于 L2 才能认为字符串是可赋值的。
  • m_ignore_member_names:此布尔值控制在类型可赋值性中是否考虑成员名称。如果为 true,除了成员 ID 之外,成员名称也被视为可赋值性的一部分,这意味着具有相同 ID 的成员也必须具有相同的名称。但如果值为 false,则忽略成员名称。
  • m_prevent_type_widening:此数据成员控制是否允许类型拓宽。如果为 false,则允许类型拓宽;但如果为 true,则较宽的类型不能赋值给较窄的类型。
  • m_force_type_validation:控制服务是否需要类型信息来完成 DataWriter 和 DataReader 之间的匹配。如果启用,它必须具有完整的类型信息,否则不需要。

3.3 注意事项

此 QoS 策略适用于 DataReader 实体。它不能在已启用的实体上更改。

3.4 TypeConsistencyKind

有两个可能的值:

  • DISALLOW_TYPE_COERCION:DataWriter 和 DataReader 必须支持相同的数据类型才能进行通信。
  • ALLOW_TYPE_COERCION:DataWriter 和 DataReader 不需要支持相同的数据类型即可通信,只要 DataReader 的类型可从 DataWriter 的类型赋值即可。
http://www.xdnf.cn/news/20380.html

相关文章:

  • 没有深度学习
  • 笔记:ubuntu安装matlab
  • 机械硬盘的工作原理
  • 接口权限验证有哪些方式
  • B.50.10.08-Nacos架构与电商应用
  • 容器镜像:运行容器的静态蓝图
  • 基于SpringBoot+JSP开发的潮鞋网络商城
  • ISO/IEC 27001 第八章 运行
  • MIMO-OFDM ISAC Waveform Design for Range-Doppler Sidelobe Suppression
  • 【C++ 双指针技巧】
  • 嵌入式学习笔记--Linux系统编程阶段--DAY06进程间通信-消息队列
  • Linux知识回顾总结----文件系统
  • 南科大适应、协同与规划的完美融合!P³:迈向多功能的具身智能体
  • 【基础-单选】下面哪一个事件方法可以获取到List滑动的偏移量
  • Flicking单图轮播无法拖动的问题
  • c++primer 个人学习总结-模板和泛型编程
  • 《QDebug 2025年8月》
  • 前端开发学习路径
  • LeetCode 468. 验证IP地址 - 详细解析
  • 嵌入式学习笔记--Linux系统编程阶段--DAY07进程间通信--存储映射和共享内存
  • 区块链技术
  • 如何减少微型导轨表面破损情况?
  • JWT概念及使用详解
  • Dart语言基础 关键字 var与dynamic
  • 整车无线布置的综述
  • 【完整源码+数据集+部署教程】室内场景分割系统源码和数据集:改进yolo11-DWR
  • 算法题(200):最大子段和(动态规划)
  • 责任链框架 03:处理器实现
  • 《Science》神经炎症综述思路套用:从机制到跨领域研究范式
  • Python实现生成矩形框、三角形框、六边形框和圆环点云