【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_value | std::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_kind | TypeConsistencyKind | ALLOW_TYPE_COERCION |
m_ignore_sequence_bounds | bool | true |
m_ignore_string_bounds | bool | true |
m_ignore_member_names | bool | true |
m_prevent_type_widening | bool | true |
m_force_type_validation | bool | true |
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 的类型赋值即可。