我的函数参数有问题。我有一个函数A,它调用一个函数B.我需要编写什么而不是???归档functionA将所有参数传递给函数B?
#include <iostream>
#include <stdarg.h>
void functionA(int a, ...);
void functionB(int a, ...);
int main()
{
functionA(2, 5, 13);
return 0;
}
void functionA(int a, ...)
{
functionB(a, ??? );
}
void functionB(int a, ...)
{
va_list params;
va_start(params, a);
for(int i = 0; i<a; i++)
{
std::cout << va_arg(params, int) << std::endl;
}
va_end(params);
}
答案 0 :(得分:1)
你必须制作两个函数,一个采用可变数量的参数,一个采用va_list
。
void vunctionB(int a, va_list va)
{
...
}
void functionB(int a, ...)
{
va_list va;
va_start(va, a);
functionB(a, va);
va_end(va);
}
也可能有其他可能的解决方案,例如使用variadic templates in C++11。
答案 1 :(得分:1)
我认为你不能用...
做到这一点。如果您重写functionB
以取va_list
之类的vprintf
,那应该会有效。
答案 2 :(得分:0)
你需要设计你的函数的两个版本,一个有valist,一个有可变参数:
void vfunctionA(int a, va_list ap)
{
// real logic
}
void functionA(int a, ...)
{
va_list ap;
va_start(ap, a);
vfunctionA(a, ap);
va_end(ap);
}
// same for functionB
现在您可以轻松地实现另一个功能:
double vrandom(int x, va_list ap)
{
return vfunctionX(x, ap);
}
如果您检查标准库或Posix库,您会发现大量示例,例如: printf
/ vprintf
,execl
/ execv
(但不是fork
/ vfork
!)。