免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1956 | 回复: 9
打印 上一主题 下一主题

[C] 请教如何融合两套功能接近,但是参数有差异的API [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-18 15:44 |只看该作者 |倒序浏览
A/B两套API基本功能一致,但是参数不一样,特别是存在callback参数,且callback的参数不一样

A_1(void * (*func_ptr_A) (void *, ...), ...)

B_1(void * (*func_ptr_B) (void *, ...), ...)

func_ptr_A和func_ptr_B的参数不一样

因为A/B基本上功能一致,所以想通过callback handler注册的方式,任意选用
可以对A_1或B_1做一层包裹,但是关于callback参数的问题还是没有办法解决

考虑到解耦,不想使用flag区分两套API,请问有没有好的实现方法?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2013-04-18 15:54 |只看该作者
可以做成不定参数的callback, 由callback自己拆分参数即可, 呵呵.

论坛徽章:
0
3 [报告]
发表于 2013-04-18 16:43 |只看该作者
linux_c_py_php 发表于 2013-04-18 15:54
可以做成不定参数的callback, 由callback自己拆分参数即可, 呵呵.

蛇大,请问能不能具体一点点?

现在假设A_1和B_1参数顺序一致,callback参数顺序不一致

handler_1 = A_1或者B_1来注册

调用handler_1相当于进入了A/B两种流程,callback被注册后在某个时间点被调用,请问这个时候它如何感知是属于哪个流程的?

假设A流程需要的callback是 void * (*func_ptr_A) (int p1, void *p2)
B流程需要的callback是void *(*func_ptr_B)(void *p1)

能不能示例一下,谢谢!

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
4 [报告]
发表于 2013-04-18 17:08 |只看该作者
木有看懂, 要用void *arg和callback(void *arg)来做抽象, 用int type注册来区分回调类型, 要从根本上抽象出来, 统一所有入口, 不可能有不同的接口的.

论坛徽章:
0
5 [报告]
发表于 2013-04-18 17:19 |只看该作者
没看懂LZ想干嘛。
是想把AB放到一起加个壳?感觉多此一举。

论坛徽章:
0
6 [报告]
发表于 2013-04-18 17:30 |只看该作者
lrita 发表于 2013-04-18 17:19
没看懂LZ想干嘛。
是想把AB放到一起加个壳?感觉多此一举。

不是加个壳

是库代码用到了A API
现在又提供了B API,基本功能类似,注册timer函数和对fd的处理函数等

所以想做成一体,抽象为handler,注册时使用A API就应用A流程

论坛徽章:
0
7 [报告]
发表于 2013-04-18 18:34 |只看该作者
linux_c_py_php 发表于 2013-04-18 17:08
木有看懂, 要用void *arg和callback(void *arg)来做抽象, 用int type注册来区分回调类型, 要从根本上抽象出 ...


也就是说首先必须注册一个type作为flag来区分类型,另外对于接口的callback类型参数必须一样?

我的意思是说,假设A_1和B_1的参数序列、类型是一样的,但是对传入的callback 这个函数指针的参数要求不一样

我如何在注册handler_1 = A_1或 handler_1 = B_1的时候做到解耦?

这个时候只能传入一种类型的callback,如果根据flag来区分传入的callback,这样我觉得跟将API写进去木区别哇?

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
8 [报告]
发表于 2013-04-18 21:54 |只看该作者
对B接口做包装,包装成A接口

论坛徽章:
0
9 [报告]
发表于 2013-04-19 09:45 |只看该作者
回复 8# selfrun


    一两层的接口包装,我有考虑过

    不过请问这种其中的callback参数不一致的情况怎么解?

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
10 [报告]
发表于 2013-04-19 11:22 |只看该作者
回复 9# lxyscls_cu


    做一套给接口B用的callback,在这些callback里代理接口A的调用者发过来的请求
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP