通过 [Flags]
属性在 C# 中将 enum
s 视为标志可以很好地工作,但是在 C++ 中执行此操作的最佳方法是什么?
例如,我想写:
enum AnimalFlags
{
HasClaws = 1,
CanFly =2,
EatsFish = 4,
Endangered = 8
};
seahawk.flags = CanFly | EatsFish | Endangered;
但是,我收到有关 int
/ enum
转换的编译器错误。有没有比直截了当的铸造更好的方式来表达这一点?最好,我不想依赖来自 3rd 方库(如 boost 或 Qt)的构造。
编辑:如答案所示,我可以通过将 seahawk.flags
声明为 int
来避免编译器错误。但是,我想有一些机制来强制类型安全,所以有人不能写 seahawk.flags = HasMaximizeButton
。
原文由 Tony the Pony 发布,翻译遵循 CC BY-SA 4.0 许可协议
“正确”的方法是为枚举定义位运算符,如:
等等其余的位运算符。如果枚举范围超出 int 范围,则根据需要进行修改。