社区
C++ 语言
帖子详情
如何对可变参数的函数进行封装?(在线等待)
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
打赏
收藏
如何对可变参数的函数进行封装?(在线等待)
一个例子: 有一个c的函数实现多个数的相加 int sum(int nNum,...) 第一个参数为要进行相加的数的数目,其余参数为要进行相加的数 现在我设计一个类Calculator 其中也有个功能与此相同,因此我想用已经存在的sum函数来实现 class caluclaor { public: int sum(int nNum,int *) //现在我把相加的数用数组传进去 { //在这里我想用sum来实现,怎么做呢 } }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;
}
Excel
函数
100问
函数
的单词都认识,但一用它来写公式,要么写不出来,要么结果不对,更别说编写嵌套公式 那些
函数
名称、
函数
参数的作用总是记不住,公式总是编制不对; 用Excel多年,还是只会常用的那三五个
函数
。 本次课程结合职场...
封装
一个
可变参数
打印
函数
在开发中,经常会用到打印,而这些打印在程序运行阶段不需要,仅在调试或开启现象的时候需要,我们用printf来打印往往不能对其
进行
灵活的控制,这个时候,我们就可以自己
封装
一个与printf功能相同的打印
函数
,加一些...
printf
可变参数
封装
#define fb (fmt, …) fa(fmt, ##__VA_ARGS__) //##__VA_ARGS__就只是告诉编译器,fa可以接受
可变参数
,不要报错,相当于又把…传递下去了(两个#的解释请参见宋宝华《linux设备驱动程序开发详解 4.0内核》p80) ...
C语言变长参数
函数
原理
在很多日志 Log
函数
的
封装
中,可以看到可变长参数
函数
。 C99中,出现了
函数
可变长参数特性,例如:printf 就可以接受任意长度的参数列表。看一下 printf
函数
的定义: int printf (const char* format, ...); 可以...
C++ 语言
64,678
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章