如何用相同方法调用函数参数个数、数据类型都不同的库函数啊

bclife 2009-06-01 08:08:16
我这有个函数指针容器fun[i]--》指向一个库函数
这些库函数的参数个数、数据类型各自不同
那我如何才能用相同的方法去访问这些函数呢?

我现在想到得方法只有再写一个函数 转换传递过来的参数 然后再调用库函数

这个方法要写很多函数 很麻烦 不知道有没有现成的可以用啊
...全文
213 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairchild811 2009-06-01
  • 打赏
  • 举报
回复
函数指针吧
lkgd1982 2009-06-01
  • 打赏
  • 举报
回复
不知道,帮顶
bclife 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 taodm 的回复:]
楼主,没有合适的解往往是因为问题本身是错误的。
所以,建议楼主google “提问的智慧”
[/Quote]
我主要是想能不能弄个类似模板的东西 这个功能很多程序里要用
bclife 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 taodm 的回复:]
楼主,没有合适的解往往是因为问题本身是错误的。
所以,建议楼主google “提问的智慧”
[/Quote]
思考一下
taodm 2009-06-01
  • 打赏
  • 举报
回复
楼主,没有合适的解往往是因为问题本身是错误的。
所以,建议楼主google “提问的智慧”
pathuang68 2009-06-01
  • 打赏
  • 举报
回复
不可能做到!
pengzhixi 2009-06-01
  • 打赏
  • 举报
回复
学习
red-fly 2009-06-01
  • 打赏
  • 举报
回复
1. 你可以参考linux下的sprintf函数的实现,即如何取得传递进来的参数。当然,这个在网上应该也同样可以找到很多例子,不一定非得到linux去找它的实现
2. 得到了传入的参数个数,然后你必需得知道你要调用的函数的参数个数及每个参数的类型,把你得到的参数列表,按照原始函数的参数类型一个一个进行强制转换,以这种方式来调用你的函数

如下所示:
void testit ( int i, ...)
{
// 1. 获取参数列表
va_list argptr;
va_start(argptr, i);

// 根据不同的库函数,则它们的参数个数和每个参数的类型已经固定,所以这里真对每个库函数进行单独的调用,其中注意它们的参数个数及类型的使用
switch( i )
{
case 0: fun[i]( va_arg( argptr, int ), va_arg( argptr, char* ), va_arg( argptr, char ) ); break;
case 1: fun[i]( va_arg( argptr, long ), va_arg( argptr, long ), va_arg( argptr, int* ) ); break;
case 2: fun[i]( va_arg( argptr, long ), va_arg( argptr, char* ) ); break;
... ...
}
va_end(argptr);
}
Sou2012 2009-06-01
  • 打赏
  • 举报
回复
学习了!!
  • 打赏
  • 举报
回复
一个函数指针就想调用所有的库函数,这不可能。

不过你可以先声明几种格式的函数指针,然后分别调用对应格式的库函数。
bclife 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kingstarer 的回复:]
那你想要别人怎么使用你的函数指针容器里面的元素呢
[/Quote]
其实我就想做一个用户在界面上可以自己添加选择函数
进行不同规模方式的组合形成一个自定义的功能
为了争取最大的自由度 最好不要每个函数都去自己重描述
bclife 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hejinjing_tom_com 的回复:]
引用楼主 bclife 的帖子:
我这有个函数指针容器fun[i]--》指向一个库函数
这些库函数的参数个数、数据类型各自不同
那我如何才能用相同的方法去访问这些函数呢?

我现在想到得方法只有再写一个函数 转换传递过来的参数 然后再调用库函数

这个方法要写很多函数 很麻烦 不知道有没有现成的可以用啊


你可以用宏来实现。 用宏可以定义一种代码模型。 将宏写到你的代码里,就会在本地被展开。
由于参数的个数不…
[/Quote]

大概意思明白
但是感觉还是不是很好的解决这个问题
我再想想
maosher 2009-06-01
  • 打赏
  • 举报
回复
用宏吧,就像MFC里的消息映射宏一样
hjjdebug 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 bclife 的帖子:]
我这有个函数指针容器fun[i]--》指向一个库函数
这些库函数的参数个数、数据类型各自不同
那我如何才能用相同的方法去访问这些函数呢?

我现在想到得方法只有再写一个函数 转换传递过来的参数 然后再调用库函数

这个方法要写很多函数 很麻烦 不知道有没有现成的可以用啊

[/Quote]
你可以用宏来实现。 用宏可以定义一种代码模型。 将宏写到你的代码里,就会在本地被展开。
由于参数的个数不一样,你需要定义不同参数个数的宏,宏不检查参数类型。
因为你要使用函数指针,所以在宏中需要有声明该指针的语句。
然后要有为该指针赋值的函数或语句。 当然是根据你传来的参数(个数或者内容)来初始化。
然后是跳转过去执行库函数(实际是执行库函数调用过程)。
不知道我是否讲明白了。
hofstede 2009-06-01
  • 打赏
  • 举报
回复
这是不可能做到的!
kingstarer 2009-06-01
  • 打赏
  • 举报
回复
那你想要别人怎么使用你的函数指针容器里面的元素呢
bclife 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 draculamx 的回复:]
试试C++里面的“重载”。。
[/Quote]
那不也还要重写很多函数么
draculamx 2009-06-01
  • 打赏
  • 举报
回复
试试C++里面的“重载”。。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧