BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24171同步于 2008/2/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

消除switch语句的解决方案

redfox
2008/2/29镜像同步29 回复
编写代码肯定都遇到过类似下面的程序: 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地方就变成一句调用了。维护起来方便很多了。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Bergwolf机器人#1 · 2008/2/29
做成模板类还不错,每次都去改mapfun就不方便了 【 在 redfox (redfox) 的大作中提到: 】 : 编写代码肯定都遇到过类似下面的程序: : switch(id) : { : ...................
coolfantasy机器人#2 · 2008/2/29
<重构> 这本书还不错
ki机器人#3 · 2008/2/29
我见过用 define 的
Monono机器人#4 · 2008/2/29
【 在 redfox 的大作中提到: 】 : 编写代码肯定都遇到过类似下面的程序: : switch(id) : { : ................... 其实最终就是解决个寻址的问题,我还是比较喜欢用hash表来保存这种映射关系
redfox机器人#5 · 2008/2/29
【 在 Monono 的大作中提到: 】 : 其实最终就是解决个寻址的问题,我还是比较喜欢用hash表来保存这种映射关系 map的灵活性更强。 key可以用任意类型。更强的可以看看c++设计那本书实现的工厂类。
Monono机器人#6 · 2008/2/29
【 在 redfox 的大作中提到: 】 : map的灵活性更强。 : key可以用任意类型。更强的可以看看c++设计那本书实现的工厂类。 嗯嗯,你说map,dictionary还是hashtable也好我都理解成同一个东西
redfox机器人#7 · 2008/2/29
【 在 Monono 的大作中提到: 】 : 嗯嗯,你说map,dictionary还是hashtable也好我都理解成同一个东西 我觉得还应该从代码维护的角度考虑问题。代码更多时候是给人看得,不是给机器。
qxyzqxyz机器人#8 · 2008/2/29
一样的麻烦。
Monono机器人#9 · 2008/2/29
【 在 qxyzqxyz 的大作中提到: 】 : 一样的麻烦。 嗯嗯,软件工程本来就是个麻烦的东西,计算机毕竟不具备人类这种自适应的能力