我正在尝试使用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枚举。我怎样才能做到这一点?我知道我可以在某些情况下做到这一点,但我不喜欢这种方法。
答案 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
,因为它们不是保证是相同的。