免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4324 | 回复: 14

如何根据ID,调用合适的函数,高手进来!! [复制链接]

论坛徽章:
0
发表于 2011-01-15 01:47 |显示全部楼层
大家好,我现在有一个类对象A, 它有三个成员函数
1. void  populate();
2. void  process();
3. void  validate();

我现在要根据不同的ID,调用不同的函数,我能想到的就是用下面这种方法了:
switch(ID)
{
   case 0: A->populate(); break;
   case 1: A->process(); break;
   case 2: A->validate(); break;
   default: break;
}

但是这种代码很不灵活,如果要增加函数,则要进行代码改动。。。。各位大侠能不能提供一个好方法啊?


祈求好的解决办法,小弟拜谢了啊!!

论坛徽章:
0
发表于 2011-01-15 10:02 |显示全部楼层
要增加函数 肯定是要改代码的 除非你增加的函数是现有的函数...

如果不希望增加一个现有的函数也需要改switch 的话 可以采用配置文件的形式
把各个函数的函数名(函数指针)和ID建立对应关系 然后主函数加载配置文件后保存成二维字符串数组 调用函数时通过函数指针形式调用
PS:使用这种方法有个前提条件 你得设计你所要添加的函数 保持函数无参数 或者参数统一

论坛徽章:
0
发表于 2011-01-15 11:00 |显示全部楼层
回调函数数组

论坛徽章:
0
发表于 2011-01-15 12:33 |显示全部楼层
方法很多啊 if else是一种

加上工厂换成map实现也是一种

换成类似观察者模式那样,通过注册的也是一种

也可以利用共享库实现

论坛徽章:
0
发表于 2011-01-15 12:41 |显示全部楼层
写个接口用于注册函数 ID+&func

论坛徽章:
0
发表于 2011-01-15 13:13 |显示全部楼层
要增加函数 肯定是要改代码的 除非你增加的函数是现有的函数...

如果不希望增加一个现有的函数也需要改s ...
wb112200 发表于 2011-01-15 10:02



    这种方法 也需要接口吧

论坛徽章:
0
发表于 2011-01-15 13:51 |显示全部楼层
不知道函数指针是否可以解决这个问题?

论坛徽章:
0
发表于 2011-01-15 14:45 |显示全部楼层
条件判断,函数指针
还是高级语言方便

论坛徽章:
0
发表于 2011-01-17 20:38 |显示全部楼层
设计模式?

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
发表于 2011-01-17 23:40 |显示全部楼层
1. 用成员函数指针数组
2. 用虚函数,因为我看到你函数名字不一样,但是午餐无返回值的.看看能不能抽象一下,用虚函数.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP