我有这个:
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 次 |
| 最近记录: |