以下是对您提供的内容的中文解释:
14.2.2.3 枚举类型
枚举类型包含一组支持的值(枚举字面量)和在这些支持值中选择的一个值。用于标识枚举类型的 TypeKind
是 TK_ENUM
。
要配置枚举字面量,需要使用 DynamicTypeBuilder
通过调用 DynamicTypeBuilder::add_member
函数为相应的支持值进行添加。传递给该函数的 MemberDescriptor
必须通过其 name
属性来确定枚举字面量名称。与枚举相关的底层原始类型需要使用 MemberDescriptor
的 type
属性进行配置。在添加第一个枚举字面量时决定此原始类型。为了保持一致性,其余的枚举字面量必须属于同一原始类型。此外,枚举字面量的值可以通过设置 MemberDescriptor
的 default_value
属性来设置,其行为与设置内置注解 @value 相同。
由于枚举类型基本上是一种有符号整数类型,只能取定义了特定值的某些具体值,因此相应的 DynamicData
获取器和设置器对应于基础有符号整数类型(以及任何其他可提升到该特定原始类型的方法)。
enum MyEnum
{
A,
B,
C
};
struct EnumStruct
{
MyEnum my_enum;
};
有关此类型 XML 定义的详细说明,请参见 XML 枚举类型。
14.2.2.4 位掩码类型
位掩码类型是一组布尔标志(bitflags),可以单独设置。用于标识位掩码类型的 TypeKind
是 TK_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助手提供,问题来源于学员提问