返回信息流编写代码肯定都遇到过类似下面的程序:
switch(id)
{
case one:
do someting;
break;
case two:
do someting;
break;
.
.
.
default:
break;
}
如果情况很多,维护这段代码将是很痛苦的事情。以下给出一种解决方案
#include <iostream>
#include <map>
using namespace std;
class mapFun
{
typedef void (mapFun::*pFun)();
public:
mapFun()
{
Init();
}
private:
void MapFun(int id)
{
(this->*m_Fun[id])();
}
void Init()
{
m_Fun[1] = &mapFun::fun1;
m_Fun[2] = &mapFun::fun2;
m_Fun[3] = &mapFun::fun3;
}
void fun1()
{
cout << "this is fun 1" << endl;
}
void fun2()
{
cout << "this is fun 2" << endl;
}
void fun3()
{
cout << "this is fun 3" << endl;
}
map<int, pFun> m_Fun;
};
int main()
{
mapFun Fun;
int i = 1;
for(; i<4; i++)
Fun.MapFun(i);
return 0;
}
###############
现在原来的switch地方就变成一句调用了。维护起来方便很多了。
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24171同步于 2008/2/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
消除switch语句的解决方案
redfox
2008/2/29镜像同步29 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
做成模板类还不错,每次都去改mapfun就不方便了
【 在 redfox (redfox) 的大作中提到: 】
: 编写代码肯定都遇到过类似下面的程序:
: switch(id)
: {
: ...................
【 在 redfox 的大作中提到: 】
: 编写代码肯定都遇到过类似下面的程序:
: switch(id)
: {
: ...................
其实最终就是解决个寻址的问题,我还是比较喜欢用hash表来保存这种映射关系
【 在 Monono 的大作中提到: 】
: 其实最终就是解决个寻址的问题,我还是比较喜欢用hash表来保存这种映射关系
map的灵活性更强。
key可以用任意类型。更强的可以看看c++设计那本书实现的工厂类。
【 在 redfox 的大作中提到: 】
: map的灵活性更强。
: key可以用任意类型。更强的可以看看c++设计那本书实现的工厂类。
嗯嗯,你说map,dictionary还是hashtable也好我都理解成同一个东西
【 在 Monono 的大作中提到: 】
: 嗯嗯,你说map,dictionary还是hashtable也好我都理解成同一个东西
我觉得还应该从代码维护的角度考虑问题。代码更多时候是给人看得,不是给机器。