考虑下面的代码,是否可以在不获取参数数量的情况下定义可变参数函数?
void printFunction(...)
{
int noOfArgs = "Any way to get number of arguments?";
va_list args;
va_start(args, noOfArgs);
cout << va_arg(args, int) << endl;
for (int i = 2; i <= noOfArgs; i++)
{
cout << va_arg(args, int) << endl;
}
va_end(args);
}
int main()
{
printFunction(1, 2, 3, 4, 5);
return 0;
}
我们使用C ++ 17中的fold expressions完成此操作>
template<class... T>
void printFunction(T&&... args)
{
std::cout << (... + args);
}
在C va_args
中无法获取参数数量。最好的办法是使用一个魔术值(该值终止序列)和一个宏以将其隐藏在用户面前: