14.2.2.9. Structure Types
结构类型是不同类型成员的聚合。用于识别结构的 TypeKind 是 TK_STRUCTURE。结构类型支持单继承,因此一个结构类型可以扩展另一个已定义的结构。扩展的结构类型应在 TypeDescriptor
的 base_type
属性中配置。通过设置 TypeDescriptor
的 extensibility_kind
属性,可以配置结构的可扩展性。
注意: 当前不支持 @nested 内置注释。
结构成员必须通过调用 DynamicTypeBuilder::add_member
函数,使用相应的 MemberDescriptor
来进行配置。
注意: 允许存在空的结构,即没有任何成员的结构。
- 成员名称通过
MemberDescriptor
的name
属性配置,而成员类型则通过type
属性设置。 - 通过设置
MemberDescriptor
的is_key
属性,可能会将结构成员键入以创建主题实例,其行为与设置 @key 内置注释相同。 - 此外,
MemberDescriptor
的default_value
属性可以用于配置成员默认值,且id
属性明确设置成员 ID。这种行为与设置 @default 和 @id 内置注释相同。
注意:
- 当前,Fast DDS-Gen 不支持 @default 内置注释。
- 当前,动态语言绑定 API 实现不支持以下内置注释:
- @optional
- @must_understand
- @external
- @try_construct
可以使用对应于底层成员类型的访问器管理成员数据。可以使用 DynamicData::get_member_id_by_name
API 检索成员 ID。有关管理复杂类型成员的信息,请参阅管理复杂数据类型部分。
// IDLXMLC++
struct InnerStruct
{
@id(0x10) long first;
};
struct ParentStruct
{
float first;
long long second;
};
struct ComplexStruct : ParentStruct
{
InnerStruct complex_member;
};
解释
在上述内容中,我们讨论了 结构(Structure)类型及其实现方式。下面是对代码示例中的各个部分的解释:
InnerStruct:
- 定义了一个名为 InnerStruct 的内部结构,其中包含一个名为 first 的长整型 (
long
) 成员,并且该成员具有一个 ID 注释 (@id(0x10)
),指明其唯一标识符。在这种情况下,这个内部结构是简单而直接的,只包含一个属性。
- 定义了一个名为 InnerStruct 的内部结构,其中包含一个名为 first 的长整型 (
ParentStruct:
- 定义了另一个名为 ParentStruct 的父级结构,它包含两个数据成员:
- 一个浮点数 (
float
) 类型的 first - 一个长整型 (
long long
) 类型的 second
- 一个浮点数 (
- 定义了另一个名为 ParentStruct 的父级结构,它包含两个数据成员:
ComplexStruct:
- 最后,定义了一个名为 ComplexStruct 的复杂结构,它从父级构造函数(即 ParentStruct)继承,并添加了一个新字段:
- 一个名为 complex_member 的内部对象,该对象是之前定义的 **InnerStruct 类型。在这个复杂结构中,可以利用父类提供的数据以及新增的数据来处理更复杂的数据关系和逻辑。
- 最后,定义了一个名为 ComplexStruct 的复杂结构,它从父级构造函数(即 ParentStruct)继承,并添加了一个新字段:
总而言之,这种设计允许创建嵌套、具有层次性的复杂数据模型,通过组合不同的数据源,使得程序能够更好地组织和管理相关信息,同时充分利用面向对象编程中的继承特性。
内容由零声教学AI助手提供,问题来源于学员提问