需要注意以下場景:C++使用特定的類和枚舉範圍switch語句中
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;
}
}
上面的代碼不能編譯,因爲數據包的是不是一個命名空間。有沒有一種替代方法可以在上面的示例中獲得相同的行爲,而不用給出枚舉類型的全局範圍?