将整数或字符转换为对应的枚举

时间:2018-11-25 15:37:06

标签: c++

我正在尝试使用OOP C ++制作井字游戏。 我有一个枚举,例如:

enum class Type : uint8_t
{
    O,
    X,
    None
};

我也有一个职业球员,这里有这个功能:

Piece Player::PickPiece(std::istream& in) const
{
    in >> pickedPiece;
    in >> temp;
    auto pickedPiece = static_cast<Piece::Type>(temp);
    return pickedPiece;
}

仅当我为O读取0(对于O零),为X读取1的值时才有效,但是我想读取像X或O这样的字符并将其转换为int枚举。我怎样才能做到这一点?我知道我可以在某些情况下做到这一点,但我不喜欢这种方法。

2 个答案:

答案 0 :(得分:2)

您可以使用switch语句:

Piece convert(int value)
{
    switch(value)
    {
        case 0:
        case 'o':
        case 'O':
            return Piece::O;
        case 1:
        case 'x':
        case 'X':
            return Piece::X;
        default:
            // Handle the case when the character and the integers are wrong
    }
}

答案 1 :(得分:2)

正如您提到的,您的枚举类型将等效于0, 1 and 2。但是,您可以在声明中为枚举赋予不同的值。

enum class Type : uint8_t
{
    O = 'O',
    X = 'X',
    None
};

Type t = static_cast<Type>('X');

但是,您不能再使用0和1。另外要注意的是,如果您专门使用char,则应该将其用作基础类型,而不要使用uint8_t,因为它们不是保证是相同的。