【发布时间】:2019-05-03 11:48:52
【问题描述】:
我经常将枚举用于如下的位标志
enum EventType {
NODE_ADDED = 1 << 0,
NODE_DELETED = 1 << 1,
LINK_ADDED = 1 << 2,
LINK_DELETED = 1 << 3,
IN_PIN_ADDED = 1 << 4,
IN_PIN_DELETED = 1 << 5,
IN_PIN_CHANGE = 1 << 6,
OUT_PIN_ADDED = 1 << 7,
OUT_PIN_DELETED = 1 << 8,
OUT_PIN_CHANGE = 1 << 9,
ALL = NODE_ADDED | NODE_DELETED | ...,
};
是否有一种简洁的重复方式来定义一个将所有其他标志组合在一个枚举中的 ALL 标志?对于小型枚举,上述方法效果很好,但假设一个枚举中有 30 个标志,这样做会很乏味。有什么工作(一般)像这样
ALL = -1
?
【问题讨论】:
-
这不是告诉编译器枚举是 sizeof(enum) == 8 吗?如果编译器可以通过另一种方式优化到更少的空间,我不想对它工作。
-
ALL是否只想要已定义值的位集,或者是否存在没有相关值的位集? -
最理想的情况是,我希望是这样,但是如果枚举的大小与手动方式(即自动扣除)完成的大小相同,那就足够了
-
在上面显示的特定情况下,您可以使用
ALL = (1 << 10) - 1。
标签: c++ enums flags enum-flags bitflags