众所周知,C++ 的switch 语句中,case 不识别字符串;
如果有很多字符串,虽然可以用 if......elseif ......elseif ......elseif ......elseif ......elseif 来判断,但写起来比较麻烦,易出错,阅读代码不直观。
想用用switch case处理字符串,需要转换一下。case只认识常量表达式,故需要对字符串进行编码,使用枚举类型,将字符串一一对应枚举类型。可以单独定义一个类,实现这个功能。
enum ID_Enum
{
ID_Invalid = 0,
ID_Shape,
ID_Image,
ID_Topic,
ID_Boundary,
ID_Connector,
...
};
使用前定义个bind函数来绑定字符串和枚举,函数将键值对放进map 中保存。
bind(ID_Shape, STR_Shape);
bind(ID_Image, STR_Image);
bind(ID_Topic, STR_MainTopic);
bind(ID_Boundary, STR_Boundary);
bind(ID_Connector, STR_Connector);
注:STR_Shape 等是宏定义,代表固定字符串“Shape”。
使用时,先找到str 在map 中对应的id,再使用switch case:
int nKey = Manager::keyFromString(str);
switch(nKey)
{
case ID_Shape: ... break;
case ID_Image: ... break;
case ID_Topic: ... break;
case ID_Boundary: ... break;
case ID_Connector: ... break;
}
这样做,对大量的相似字符串可以进行有效操作,使用起来很方便。