我有这个:
enum class Categories : uint32_t {
C6 = 0x00000020,
C7 = 0x00000040,
C8 = 0x00000080,
...
};
Run Code Online (Sandbox Code Playgroud)
我选择了一个枚举类,因为它非常适合确定范围。但缺点是,当我需要使用类别作为按位运算的掩码位时,我需要首先将它们转换为 uint32_t。
例子:
uint32_t masterCat = ((uint32_t)MyClass::Categories::C6) | ((uint32_t)MyClass::Categories::C7);
有没有一种方法可以获得相同的范围优势,而不必在每次使用之前进行转换?如果我使用常规枚举,那么我就会失去范围优势:(
例子:
uint32_t masterCat = (MyClass::Categories::C6) | (MyClass::Categories::C7);
将其拆分enum class
为 anenum
和 a class
(或struct
为了方便起见)。
struct Categories {
enum : uint32_t {
C6 = 0x00000020,
C7 = 0x00000040,
C8 = 0x00000080,
};
};
Run Code Online (Sandbox Code Playgroud)
由于enum
是嵌入类型,因此您需要指定Categories
才能访问它,如 中所示Categories::C6
。
如果这是在另一个类中,例如
class MyClass {
public:
struct Categories {
enum : uint32_t {
C6 = 0x00000020,
C7 = 0x00000040,
C8 = 0x00000080,
};
};
};
Run Code Online (Sandbox Code Playgroud)
那么您可以使用MyClass::Categories::C6
来引用其中一个枚举,但两者都MyClass::C6
不起作用C6
。
归档时间: |
|
查看次数: |
164 次 |
最近记录: |