使用map+函数指针代替switch和if-else的一个例子
来源:互联网 发布:奥林巴斯显微镜 知乎 编辑:程序博客网 时间:2024/06/09 23:33
很多时候我们都会遇到用switch或者if-else来进行大量判断的情况,如下面的例子
int code = 4;switch (code){ case 0: // break; case 0: // break; case 1: // break; case 2: // break; case 0: // break; case 3: // break; case 4: // break; case 5: // break;// 下面还有一大堆}
这样的代码又长又臭,还好有一个简单方法可以代替,定义如下:
// 定义一个函数指针class Test;typedef void (Test::*pFun)(int code);// 一个测试类class Test{public:// 一个枚举MyCode,表示处理代码enum MyCode{code_1,code_2,code_3,code_4,code_5,code_6,code_7,};// 初始化处理编码与处理函数的对应关系voidInitHandlerMap();// 主函数voidProcess(int code);voidHandler1(int code){printf("code = %d\n",code);}voidHandler2(int code){printf("code = %d\n",code);}voidHandler3(int code){printf("code = %d\n",code);}voidHandler4(int code){printf("code = %d\n",code);}voidHandlern(int code){printf("code = %d\n",code);}private:map<int,pFun>m_pHandlerMap;};
void Test::InitHandlerMap(){m_pHandlerMap.insert(make_pair(Test::code_1,&Test::Handler1));m_pHandlerMap.insert(make_pair(Test::code_2,&Test::Handler2));m_pHandlerMap.insert(make_pair(Test::code_3,&Test::Handler3));m_pHandlerMap.insert(make_pair(Test::code_4,&Test::Handler4));}void Test::Process(int code){map<int,pFun>::iterator it;for (it = m_pHandlerMap.begin(); it != m_pHandlerMap.end(); ++it){if (it->first == code){(this->*(it->second))(code);break;}}}int main(){int code = Test::code_2;Test test;test.InitHandlerMap();test.Process(code);return 0;}
0 0
- 使用map+函数指针代替switch和if-else的一个例子
- 使用Map代替else if过多的情况
- 用数组代替if-else和switch-case语句
- 代替 if-else,switch-case 的几种方法
- 由if-else,switch代替方案引起的思考
- js---javaScript (if....else和switch...case的使用实例)
- if-else和switch的效率问题
- if else 和 switch的效率
- if else 和switch 的区别
- switch 和 if else的效率区别
- day3 if else 和switch的学习
- if else 和 switch 的区别
- switch和if else的效问题
- ImmutableMap 例子代替case if else 的用法
- 使用函数指针来代替switch语句
- switch代替if else实现学生成绩等级的判定,switch实现域的判定
- 用&&和||代替if..else..
- [Java] 使用多个 if 语句、else if 和 switch 的区别
- 《nature》 机器学习的3个热门分支 “深度学习”、“增强式学习”、“概率学习” 的最新综述
- 第二届SDN大赛--提高题1
- 自己动手解Json!(IOS利用分治法解析Json)(二)
- android学习笔记
- 【iOS开发-网络】使用get请求发送和接受数据
- 使用map+函数指针代替switch和if-else的一个例子
- LeetCode 之 Reverse Linked List — C 实现
- Ubuntu 查看和杀死进程
- 1.SpringMVC开发环境搭建
- 对常用的软件开发模型的总结与个人理解_Phoenix-晶
- hdu 5245 Joyful
- 不用+、-、×、÷对两个数求和
- [leetcode] 77.Combinations
- 个人笔记之构造方法