如何将 int 转换为 C++ 中的枚举?
例如:
enum Test
{
A, B
};
int a = 1;
如何转换a
为 type Test::A
?
int i = 1;
Test val = static_cast<Test>(i);
Test e = static_cast<Test>(1);
你的代码
enum Test
{
A, B
}
int a = 1;
解决方案
Test castEnum = static_cast<Test>(a);
分拆结束的问题,“我如何将 a 转换为类型Test::A
”,而不是严格要求在那里有演员表,并迟到几年才回答,因为这似乎是一个流行的问题,没有其他人提到过替代方案,根据 C++11 标准:
5.2.9 静态转换
...对于某些发明的临时变量(8.5) ,如果声明 格式正确,则表达式
e
可以T
使用static_cast
形式的 a 显式转换为类型。这种显式转换的效果与执行声明和初始化,然后使用临时变量作为转换的结果相同。static_cast<T>(e)
T t(e);
t
因此,直接使用表单t(e)
也可以,您可能更喜欢它的整洁:
auto result = Test(a);
Test castEnum = static_cast<Test>(a-1);
将投射a
到A
. 如果您不想子结构 1,您可以重新定义enum
:
enum Test
{
A:1, B
};
在这种情况下Test castEnum = static_cast<Test>(a);
,可用于强制a
转换为A
.