我正在尝试打开类型为 unsigned int 的作用域枚举:
枚举定义为:
const enum struct EnumType : unsigned int { SOME = 1, MORE = 6, HERE = 8 };
我收到一个 const unsigned int 引用,我正在尝试根据枚举值检查该值。
void func(const unsigned int & num)
{
switch (num)
{
case EnumType::SOME:
....
break;
case EnumType::MORE:
....
break;
....
default:
....
}
}
这会导致语法错误:错误:此常量表达式的类型为“EnumType”,而不是所需的“unsigned int”类型。
现在,在每个开关上使用一个static_cast
,例如:
case static_cast<unsigned int>(EnumType::SOME):
....
break;
case static_cast<unsigned int>(EnumType::MORE):
....
break;
修复了语法错误,尽管在每个 case 语句中进行强制转换似乎不是执行此操作的好方法。我真的需要对每种情况进行转换,还是有更好的方法?
最佳答案
您可以通过将 switch 变量本身转换为 EnumType
来解决这个问题:
switch (static_cast<EnumType>(num)) {
( Demo )
作用域枚举的目的是使它们成为强类型的。为此,不存在与基础类型之间的隐式转换。您必须转换 switch 变量或 switch cases。我建议转换 switch 变量,因为这需要更少的代码,因此会使维护更容易。
IMO 正确的解决方案是更改函数以接受 const EnumType &
(或只是 EnumType
)。
关于c++ - 打开作用域枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768252/