我正在尝试使用枚举值作为传感器的位置来创建一个类,并且我正在使用类型为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的经典指示。

07-27 22:10