可变参数问题

jfsaka 2008-02-25 12:38:06
有这样一个函数原型:
void show(string RItem,string item,...)

其中需要调用函数show("Version","url"),以及show("Version","Server",2);
就是需要接收一个可变int型参数,我是这样写的,可是问题出在当没有可变参数时,函数也输出了一个值,问题时不知道该怎么判断可变参数的个数?
int main()
{
show("Version","updata_url");
show("Version","Server IP",2);
return 0;
}

void show(string RItem,string item,...)
{
va_list ap;
va_start(ap,item);
int i=va_arg(ap,int);
cout <<RItem<<endl;
cout <<item<<endl;
cout <<i<<endl;
va_end(ap);
}
...全文
188 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuegao007 2008-02-29
  • 打赏
  • 举报
回复
void show(string RItem,string item,...)
{
va_list ap;
va_start(ap,item);
int i=va_arg(ap,int);
cout <<RItem<<endl;
cout <<item<<endl;
cout <<i<<endl;
va_end(ap);
}
第一个参数RItem不是属于可变参数的,和后面的参数不一样,他可以随便写的。只是后面的参数是从RItem的地址往后分配。你可以用Ritem表示参数个数,
for(int i=0; i<Ritem; i++)
{
cout<<va_arg(ap, int);
}
当然你也可以用别的方法的
jfsaka 2008-02-28
  • 打赏
  • 举报
回复
感谢楼上的回复,可是这样也解决不了问题啊,read_xml(string server,string configuration,string ip,...),后面可能会有user_name,user_ID等项,参数默认也是不行的,后面的可变参数其类型有int ,string等,我看过printf的函数,它是用"%",来控制参数的个数的
iambic 2008-02-28
  • 打赏
  • 举报
回复
把你的所有参数包装在一个对象里面。
sunkaidong 2008-02-28
  • 打赏
  • 举报
回复
学习中
白乔 2008-02-27
  • 打赏
  • 举报
回复
使用va_xxx宏

我在那本《标准C++开发入门与编程实践》上具体的例举过
redleaves 2008-02-27
  • 打赏
  • 举报
回复
重载解决不了,再加点模板...
ShardowM 2008-02-27
  • 打赏
  • 举报
回复
学习
大前置 2008-02-27
  • 打赏
  • 举报
回复
方法1:重载

方法2:参数默认
void show(string RItem,string item,int i=0)

以下都能调用上面的函数:
show("Version","updata_url");
show("Version","Server IP",2);

iambic 2008-02-27
  • 打赏
  • 举报
回复
重载解决不了?
taodm 2008-02-27
  • 打赏
  • 举报
回复
汗,对string类型使用不定参数宏,楼上的还真敢回。
jfsaka 2008-02-26
  • 打赏
  • 举报
回复
本来的函数是这样的read_xml(string server,string configuration,string ip,...),后面可能会有user_name,user_ID等项,如果用函数重载的话将无法适应函数的使用,所以只能使用可变参数,但是该怎么去控制可变参数的个数呢?
taodm 2008-02-25
  • 打赏
  • 举报
回复
绝对不可对class类型使用可变参数。
用vector<string>或者函数重载。
sheenl 2008-02-25
  • 打赏
  • 举报
回复
说句题外话, 可变参数的函数,本来就是严重不提倡的。
既然是c++了, 为什么不用函数重载?
hastings 2008-02-25
  • 打赏
  • 举报
回复
show函数中你有三个cout,当然无论如何都会输出三行的。。
sheenl 2008-02-25
  • 打赏
  • 举报
回复
没有办法。
C 的printf采用了在format字符串里的%来标志参数的方式。
wenjun1130 2008-02-25
  • 打赏
  • 举报
回复
你可以设置表示参数个数的变量参数啊

64,849

社区成员

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

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