注意以下场景:
class Packet {
public:
enum Opcode {
S2C_JOIN_GAME,
S2C_LEAVE_GAME
} opcode;
std::string payload;
};
class Client{
public:
void readPacket(Packet packet);
};
void Client::readPacket(Packet packet){
switch(packet.opcode){
case Packet::Opcode::S2C_JOIN_GAME:
//call some function to handle this case
break;
case Packet::Opcode::S2C_LEAVE_GAME:
//call another function to handle this case
break;
}
}
在 Client::readPacket
中,我需要检查操作码并调用依赖于它的特定函数。在我的项目中,我有很多不同的操作码。我能否在我的 switch 语句中使用特定范围,这样我就不需要每次都键入 Packet::Opcode
?
例如:
void Client::readPacket(Packet packet){
switch(packet.opcode){
using namespace Packet::Opcode; //illegal, is there something similar?
using namespace Packet; // also illegal
case S2C_JOIN_GAME:
//do stuff.
break;
case S2C_LEAVE_GAME:
//do stuff.
break;
}
}
上面的代码将无法编译,因为 Packet 不是命名空间。有没有另一种方法可以在不给我的枚举类型全局范围的情况下获得上面示例中的相同行为?
最佳答案
如果项目名称太长,您可以定义一个适当的类型别名:
void Client::readPacket(Packet packet)
{
using Opcode = Packet::Opcode;
switch(packet.opcode)
{
case Opcode::S2C_JOIN_GAME:
//do stuff.
break;
case Opcode::S2C_LEAVE_GAME:
//do stuff.
break;
}
}
关于C++ 在 switch 语句中使用特定的类和枚举范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135258/