判断某个值是否在一个枚举值中
proto文件中有如下定义:
enum EquipSlotID // 装备特定位置
{
ESI_ARM = 0; // 武器
ESI_GEM = 1; // 宝物
ESI_CLOTHES = 2; // 衣服
ESI_BELT = 3; // 腰带
ESI_JEWELRY = 4; // 饰品
}
以前的做法是:
std::set<int> ReserveEquipSlots = {ESI_ARM, ESI_GEM, ESI_CLOTHES, ESI_BELT, ESI_JEWELRY};
...
int slotID = -1;
if (ReserveEquipSlots.find(slotID) == ReserveEquipSlots.end())
{
...
}
Protobuf中:
其实,protobuf在生成*.pb.h、*.pb.c时,已经在其中添加了全局函数:
SkillSlotID_IsValid,其实现比较简单:
bool EquipSlotID_IsValid(int value) {
switch (value) {
case 0:
case 1:
case 2:
case 3:
case 4:
return true;
default:
return false;
}
}
所以,无需自己再定义一个容器来调用其find函数,直接调用全局的SkillSlotID_IsValid即可。