如何查询用作位掩码的枚举类的有效性而不转换为基础类型

问题描述

我有一个用于位掩码的枚举类,就像这样(在虚幻引擎中,因此是 uint8 类型)

enum class Level : uint8
{
    None = 0x0,Debug = 0x1,Info = 0x2,Warning = 0x4,...
}

我为 |&^ 添加了内联运算符,以便我可以使用成员作为实际位掩码(例如 mask = Level::Warning | Level::Debug),如下所示:

inline Level operator&(const Level& lhs,const Level& rhs)
{
    return (Level)((uint8)lhs & (uint8)rhs);
}

现在在某个时候我想查询,是否设置了一个位。但是,如果不强制转换为 uint8,这似乎不起作用:

if(mask & Level::Debug) //does not work,C2451
if((uint8)(mask & Level::Debug)) //does work

有没有一种方法可以使查询工作而不必将其强制转换为基础类型?

编辑: 目标是使调用代码尽可能短(和可读)。在这种情况下 & 的含义似乎与使用诸如额外的 any 方法 as suggested in a similar question 之类的调用一样清晰。添加 == Level::Debug 代码当然也有效,但不会缩短使用的代码。更改运算符的返回类型有效,但基本上将问题转移到 Level myLevel = Level::Debug | Level::Warning 之类的赋值上,因此我不会整体改进我的代码 imo。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)