如何对可变参数的函数进行封装?(在线等待)

fengfeng2003 2004-03-17 08:23:12
一个例子:
有一个c的函数实现多个数的相加
int sum(int nNum,...)
第一个参数为要进行相加的数的数目,其余参数为要进行相加的数

现在我设计一个类Calculator
其中也有个功能与此相同,因此我想用已经存在的sum函数来实现
class caluclaor
{
public:
int sum(int nNum,int *) //现在我把相加的数用数组传进去
{
//在这里我想用sum来实现,怎么做呢
}
}
...全文
248 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2004-03-18
  • 打赏
  • 举报
回复
?我前边已经说了“只能是用va_list实现sum然后调用”。你这样的需求目前的C无法实现。
fengfeng2003 2004-03-18
  • 打赏
  • 举报
回复
我看了sprintf ,vsprintf
前者是可变参数,后者是用va_list 来传递参数

但是我这里的情况相反,我想调用具有可变参数的函数


to: fierygnu(va_list)

我的水平太差,能不能说明白一些
caowk 2004-03-18
  • 打赏
  • 举报
回复
在VC中比较简单:
(1)可以用汇编把参数一个一个的push进去再使用call指令。
(2)想办法把可变的部分转换为一个结构。再定义一个模板结构。
template<int size> xanypara
{ char str[size]; };
再定义一个模板类函数(以xanypara作为参数)。

但是这些做法写出的代码都很难在不同的编译器之间移植,除非你很明白各种不同的编译器的参数传递规则。

BCB/VC中:以32位对齐来传递的。

danielpan 2004-03-17
  • 打赏
  • 举报
回复
把数组的个数也同时作为参数传进去吧.
你在调用的时候总是知道这个数目的.
fierygnu 2004-03-17
  • 打赏
  • 举报
回复
看sprintf和vsprintf的区别。
fengfeng2003 2004-03-17
  • 打赏
  • 举报
回复
fierygnu(va_list)
能具体解释一下吗
fierygnu 2004-03-17
  • 打赏
  • 举报
回复
呵呵,只能是用va_list实现sum然后调用。
hpho 2004-03-17
  • 打赏
  • 举报
回复
不行的. 除非全局sum的定义是sum(int, va_list);
事实上就好像你要写一个myprintf(char const*, ...);然后在函数里调用原来printf一样, 是不行的.
computerhero 2004-03-17
  • 打赏
  • 举报
回复
学习一下。
fengfeng2003 2004-03-17
  • 打赏
  • 举报
回复
我的意思是原来使用可变参数来实现的,但是我现在想用数组把参数传进取

也就是怎么把现在的数组里面的参数,传到原来sum的可变参数中
caixiwen 2004-03-17
  • 打赏
  • 举报
回复
#include <stdarg.h>
int sum(int cnt,...)
{
int i,sum=0;
va_list ap;
va_start(ap,cnt);
for(i=0;i<cnt;++i)
{
sum += va_arg(ap,int);
}
va_end(ap);
return sum;
}

64,678

社区成员

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

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