ZBLOG

14.2.2.3. Enumeration Types An enumeration contains a set of supported values (enumeration literals) and a selected value among those supported. The TypeKind used to identify enumeration types is TK_ENUM. The enumeration literals must be configu...

以下是对您提供的内容的中文解释:

14.2.2.3 枚举类型

枚举类型包含一组支持的值(枚举字面量)和在这些支持值中选择的一个值。用于标识枚举类型的 TypeKindTK_ENUM

要配置枚举字面量,需要使用 DynamicTypeBuilder 通过调用 DynamicTypeBuilder::add_member 函数为相应的支持值进行添加。传递给该函数的 MemberDescriptor 必须通过其 name 属性来确定枚举字面量名称。与枚举相关的底层原始类型需要使用 MemberDescriptortype 属性进行配置。在添加第一个枚举字面量时决定此原始类型。为了保持一致性,其余的枚举字面量必须属于同一原始类型。此外,枚举字面量的值可以通过设置 MemberDescriptordefault_value 属性来设置,其行为与设置内置注解 @value 相同。

由于枚举类型基本上是一种有符号整数类型,只能取定义了特定值的某些具体值,因此相应的 DynamicData 获取器和设置器对应于基础有符号整数类型(以及任何其他可提升到该特定原始类型的方法)。

enum MyEnum
{
    A,
    B,
    C
};

struct EnumStruct
{
    MyEnum my_enum;
};

有关此类型 XML 定义的详细说明,请参见 XML 枚举类型。

14.2.2.4 位掩码类型

位掩码类型是一组布尔标志(bitflags),可以单独设置。用于标识位掩码类型的 TypeKindTK_BITMASK。必须使用 TypeDescriptor 的 bound 属性设置位掩码绑定、最大位数,最大允许为 64 位。

位标志必须通过调用 DynamicTypeBuilder::add_member 函数进行配置。每个位标志都由一个 MemberDescriptor 描述,定义其名称使用 name 属性。与位标志相关联的底层原始类型必须是 TK_BOOLEAN,并且必须在 MemberDescriptor 中设置 type 属性。MemberDescriptor 的 id 属性可用于指示位掩码中的位标志位置。这种行为与设定 @position 内置注释相同。如果未指定位置,则按顺序排列。

动态构建器工厂提供了函数 DynamicTypeBuilderFactory::create_bitmask_type,以方便创建位掩码类型。

可以使用 DynamicData::get_boolean_value/DynamicData::set_boolean_value 来操作特定位标志,或者使用对应于位掩码绑定的无符号整数获取器/设置器。在这种情况下,仅会设置已命名的位置(未命名的位置总是未设置)。

@bit_bound(8)
bitmask MyBitMask
{
    @position(0) flag0,
    flag1,
    flag2,
    @position(5) flag5
};

struct BitmaskStruct
{
    MyBitMask my_bitmask;
};

有关此类 XML 定义的详细信息,请参见 XML 位掩码类型。

14.2.2.5 别名类型

别名类型为已经存在的某种类型提供另一个名称。用于识别别名的 TypeKind 是 TK_ALIAS。在定义别名名称之外,还必须通过 TypeDescriptor 的 base_type 属性设置底层类型。如果将另一个别名作为基类,则支持别名递归。

创建 DynamicData 后,可以像处理基础类一样访问信息。

typedef MyEnum MyAliasedEnum;
typedef string<100> MyAliasedBoundedString;
typedef MyAliasedEnum MyRecursiveAlias;

struct AliasStruct
{
    MyAliasedEnum my_aliased_enum;
    MyAliasedBoundedString my_aliased_bounded_string;
    MyRecursiveAlias my_recursive_alias;
};

有关此类 XML 定义的信息,请参见 XML 别名 类型。

14.2.2.6 序列 类型

序列 types 是一种一维集合,可以存储任何一种数据。用于识别序列数据结构의 TypeKind 为 TK_SEQUENCE。TypeDescriptor 的 element_type 属性必须被配置为集合的数据。此外,还需配置 bound 属性以设定序列最大长度,对于无限制序列,可用 LENGTH_UNLIMITED 表示。

动态构建器工厂提供了函数 DynamicTypeBuilderFactory::create_sequence_type,以便于创建这一数据结构,这一 API 要求输入集合中存储的数据和集合边界,如果是无限制则用 LENGTH_UNLIMITED 表示。

DynamicData 类提供针对每种基本数据结构 specific 的 get_values() 和 set_values() 方法,使用户能轻松操作基本数据结构序列。这些方法也适用于基本数据结构提升。在对于更复杂数据结构请参考管理复杂数据的数据部分。

如果要修改序列中的特定范围内的数据,通过给 get_values()/set_values() 提供起始索引,就只会管理从该元素向后的数据,直到给定输入长度结束;同时还可以使用 get_value()/set_value() 方法直接传递需要修改元素所在索引来修改特定集合元素的数据。

struct SequenceStruct
{
    sequence<MyBitMask> bitmask_sequence;
    sequence<short, 5> short_sequence;
};

有关此类 XML 定义的信息,请参见 XML 序列 类型。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?