问题描述
我一直在研究如何使用可变数量的参数声明函数或类成员,并且遇到了可变参数函数,但是我想知道是否有某种方法可以访问传递给函数的参数数量,,而不必像大多数文档所介绍的那样直接将其作为第一个参数传递。我也知道我可以使用可变参数模板或std::initializer_list
,但是由于我希望传递多个相同类型的参数 ,所以这些参数看起来太通用和/或复杂语法。
#include <cstdarg>
bool func(int args...) {
va_list list;
va_start(list,args);
int val = args;
while(val >=0) {
std::cout << val << std::endl;
val = va_arg(list,int);
}
return true;
}
bool other_func(int c,int args...) {
va_list list;
va_start(list,args);
int val = args;
for (int i = 0; i<c; i++) {
std::cout << val << std::endl;
val = va_arg(list,int);
}
return true;
}
int main(int argc,char const *argv[]) {
func(2,7,47,-1,23 /* ignored */);
other_func(3 /* n of parameters */,2,47);
return 0;
}
在这些特定示例中,func
循环遍历输入自变量,直到找到负值(以说明问题并强制停止标志),而other_func
要求将自变量数量设置为作为第一个参数传递。在我看来,这两种实现方式都存在缺陷和不安全之处,是否有更好的方法来解决此问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)