将整数或字符转换为相应的枚举 我试着用OOP C++制作一个TIC Tac趾游戏。 我有一个类似以下作品的枚举: enum class Type : uint8_t { O, X, None };
我还有一个类播放器,这里有这个功能:将整数或字符转换为相应的枚举 我试着用OOP C++制作一个TIC Tac趾游戏。 我有一个类似以下作品的枚举: enum class Type : uint8_t { O, X, None };,c++,C++,我还有一个类播放器,这里有这个功能: Piece Player::PickPiece(std::istream& in) const { in >> pickedPiece; in >> temp; auto pickedPiece = static_cast<Piece::Type>(temp); return pickedPiece; } piecplayer::PickPiece(std::istream&in)
Piece Player::PickPiece(std::istream& in) const
{
in >> pickedPiece;
in >> temp;
auto pickedPiece = static_cast<Piece::Type>(temp);
return pickedPiece;
}
piecplayer::PickPiece(std::istream&in)const
{
在>>拾取件中;
在>>温度;
自动拾取件=静态铸件(温度);
返回拾取件;
}
只有当我读取0代表O(0代表O)、1代表X这样的值时,它才起作用,但我想读取X或O这样的字符,然后将其转换为int枚举。我该怎么做?我知道我可以用一些if条件来做,但我不喜欢这种方法。您可以使用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
}
}
您可以使用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
}
}
正如您提到的,您的枚举类型将等效于
0、1和2
。但是,您可以在声明中为枚举指定不同的值
enum class Type : uint8_t
{
O = 'O',
X = 'X',
None
};
Type t = static_cast<Type>('X');
enum类类型:uint8\t
{
O='O',
X='X',
没有一个
};
t型=静态_型(“X”);
但是,您不能再使用0和1。另一件需要注意的事情是,如果您专门使用
char
s,您可能应该使用它作为基础类型,而不是uint8\u t
,因为它们不能保证相同。正如您提到的,您的枚举类型将等同于0、1和2
。但是,您可以在声明中为枚举指定不同的值
enum class Type : uint8_t
{
O = 'O',
X = 'X',
None
};
Type t = static_cast<Type>('X');
enum类类型:uint8\t
{
O='O',
X='X',
没有一个
};
t型=静态_型(“X”);
但是,您不能再使用0和1。另一件需要注意的事情是,如果您专门使用
char
s,您可能应该使用它作为基础类型,而不是uint8\u t
,因为它们不能保证是相同的代码>?标题是“convert enum to int”,但看起来您实际上想要将字符串转换为enum。它是哪一个?“在C++中将枚举转换为int”-使用转换:int int\u value\u of_enum=static\u转换(一个_enum\u值)
enum类类型
——这是一个非常通用的名称。您可能需要重新思考:)您是否尝试过if(temp=='X'| | temp=='X')返回类型::X代码>?标题是“convert enum to int”,但看起来您实际上想要将字符串转换为enum。它是哪一个?“在C++中将枚举转换为int”-使用转换:int int\u value\u of_enum=static\u转换(一个_enum\u值)
enum类类型
——这是一个非常通用的名称。您可能想重新考虑:)切换(tolower(value))
而不是检查每个语句中每个字符的小写和大写字母不是更好吗…?这是一个很好的观点。我不想这样做,以防除了0和1之外还有其他整数(不在这里,但如果其他人看到解决方案)并且其中一个被转换。做switch(tolower(value))
而不是检查每个语句中每个字符的小写和大写字母…?这是一个很好的观点。我不想这样做,以防除了0和1之外还有其他整数(不在这里,但如果其他人看到解决方案),其中一个被转换。