ZBLOG

14.2.2.9. Structure Types Structure types are an aggregation of members of different types. The TypeKind used to identify structures is TK_STRUCTURE. Structure types have single inheritance support, so a structure type might extend one other alre...

14.2.2.9. Structure Types

结构类型是不同类型成员的聚合。用于识别结构的 TypeKind 是 TK_STRUCTURE。结构类型支持单继承,因此一个结构类型可以扩展另一个已定义的结构。扩展的结构类型应在 TypeDescriptorbase_type 属性中配置。通过设置 TypeDescriptorextensibility_kind 属性,可以配置结构的可扩展性。

注意: 当前不支持 @nested 内置注释。

结构成员必须通过调用 DynamicTypeBuilder::add_member 函数,使用相应的 MemberDescriptor 来进行配置。

注意: 允许存在空的结构,即没有任何成员的结构。

  • 成员名称通过 MemberDescriptorname 属性配置,而成员类型则通过 type 属性设置。
  • 通过设置 MemberDescriptoris_key 属性,可能会将结构成员键入以创建主题实例,其行为与设置 @key 内置注释相同。
  • 此外,MemberDescriptordefault_value 属性可以用于配置成员默认值,且 id 属性明确设置成员 ID。这种行为与设置 @default 和 @id 内置注释相同。

注意:

  • 当前,Fast DDS-Gen 不支持 @default 内置注释。
  • 当前,动态语言绑定 API 实现不支持以下内置注释:
    • @optional
    • @must_understand
    • @external
    • @try_construct

可以使用对应于底层成员类型的访问器管理成员数据。可以使用 DynamicData::get_member_id_by_name API 检索成员 ID。有关管理复杂类型成员的信息,请参阅管理复杂数据类型部分。

  1. // IDLXMLC++
  2. struct InnerStruct
  3. {
  4. @id(0x10) long first;
  5. };
  6. struct ParentStruct
  7. {
  8. float first;
  9. long long second;
  10. };
  11. struct ComplexStruct : ParentStruct
  12. {
  13. InnerStruct complex_member;
  14. };

解释

在上述内容中,我们讨论了 结构(Structure)类型及其实现方式。下面是对代码示例中的各个部分的解释:

  1. InnerStruct:

    • 定义了一个名为 InnerStruct 的内部结构,其中包含一个名为 first 的长整型 (long) 成员,并且该成员具有一个 ID 注释 (@id(0x10)),指明其唯一标识符。在这种情况下,这个内部结构是简单而直接的,只包含一个属性。
  2. ParentStruct:

    • 定义了另一个名为 ParentStruct 的父级结构,它包含两个数据成员:
      • 一个浮点数 (float) 类型的 first
      • 一个长整型 (long long) 类型的 second
  3. ComplexStruct:

    • 最后,定义了一个名为 ComplexStruct 的复杂结构,它从父级构造函数(即 ParentStruct)继承,并添加了一个新字段:
      • 一个名为 complex_member 的内部对象,该对象是之前定义的 **InnerStruct 类型。在这个复杂结构中,可以利用父类提供的数据以及新增的数据来处理更复杂的数据关系和逻辑。

总而言之,这种设计允许创建嵌套、具有层次性的复杂数据模型,通过组合不同的数据源,使得程序能够更好地组织和管理相关信息,同时充分利用面向对象编程中的继承特性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21832

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?