我正在尝试使用枚举值作为传感器的位置来创建一个类,并且我正在使用类型为int的向量作为此函数的输入,并且我想使用枚举值。我不确定此代码是否可以工作。我不太确定如何进行测试。
#include <vector>
place getPos(vector<int>& pin)
{
int i;
for(i = 0; i <= sizeof(pin); i++)
{
if (pin[i])
break;
}
place castEnum = (place)i;
return castEnum;
}
因此,这是我所掌握的最新信息:
#include <vector>
place getPos(vector<int>& pin)
{
int i;
for(i = 0; i <= pin.size(); i++)
{
if (pin[i])
break;
}
return static_cast <place> (i);
}
最佳答案
可以使用enum
将整数值强制转换为static_cast
:
enum FooType
{
ftOne = 1,
ftTwo
};
int main()
{
const int n = 1;
FooType ft = static_cast <FooType> (n);
}
由于
static_cast
是编译时操作,并且n
仅在运行时是已知的,因此,如果n
与枚举值之一不匹配,则结果值不确定。这可能是一个严重的问题。您将需要预先确定要转换的值是该
enum
的合法值。当您考虑到这一点时,通常这首先会破坏执行转换的目的。这通常表明您做错了事。为什么需要将整数值转换为
enum
?一个可能的原因是因为您从套接字中拉出了该值,或者从其他进程间通信方式中获得了该值。除此之外,没有其他有效的用例立即浮现在脑海。这是XY Problem的经典指示。