【发布时间】:2021-08-21 18:36:32
【问题描述】:
我正在尝试这样做,而且这样做很乏味。
enum class GUIEventEnum : uint64 {
NONE = 0,
CURSOR_LMB_DOWN = 1 << 1,
CURSOR_LMB_UP = 1 << 2,
CURSOR_LMB_CLICK = 1 << 3,
CURSOR_RMB_DOWN = 1 << 4,
CURSOR_RMB_UP = 1 << 5,
CURSOR_RMB_CLICK = 1 << 6,
CURSOR_MMB_DOWN = 1 << 7,
CURSOR_MMB_UP = 1 << 8,
CURSOR_MMB_CLICK = 1 << 9,
CURSOR_SCROLL = 1 << 10,
};
而且还会有更多。有没有办法我可以在列表中声明它?像枚举?
【问题讨论】:
-
如果您希望枚举常量具有特定值(不遵循枚举默认使用的方案),那么您必须明确指定值。
-
根据用例,您可以创建一个包装
uint64_t并在需要时分配标志(在static map中)的类,这将规避此问题,但它不会是枚举到那时。 -
抽象它?如果您的“标志”是一个类对象,您可以嵌套(顺序)枚举器并重载
operator|以执行1 << E,然后再应用基本的按位或。 -
毕竟,如果您使用范围枚举,则无论如何都必须进行大量重载(或大量强制转换)。
-
"还会有更多。" 如果这是真的,也许位域不是您所需要的。也许您只需要发送多个事件,每个事件都有自己的值。