C++ 如何将参数列表传递给c+;中的另一个函数+;?
我对函数参数有问题。我有一个调用函数B的函数a。我需要写什么来代替???要存档该函数,函数会将所有参数传递给函数B吗C++ 如何将参数列表传递给c+;中的另一个函数+;?,c++,function,arguments,C++,Function,Arguments,我对函数参数有问题。我有一个调用函数B的函数a。我需要写什么来代替???要存档该函数,函数会将所有参数传递给函数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, ...
#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);
}
#包括
#包括
无效函数(INTA,…);
无效函数B(内部a,…);
int main()
{
功能性(2,5,13);
返回0;
}
虚函数(整数a,…)
{
功能B(a,?);
}
无效函数B(内部a,…)
{
va_列表参数;
va_启动(参数a);
对于(int i=0;i,您必须生成两个函数,一个函数采用可变数量的参数,另一个函数采用va_列表
void vunctionB(int a, va_list va)
{
...
}
void functionB(int a, ...)
{
va_list va;
va_start(va, a);
functionB(a, va);
va_end(va);
}
也可能有其他可能的解决方案,例如使用。您需要设计两个版本的函数,一个带有valists,另一个带有可变参数:
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
!)如果你像vprintf
那样重写函数b
来获取一个va_列表
,那应该行得通。不要使用可变数量的参数。这是一个愚蠢的想法,而且不安全。你为什么要做意大利面?你可能想查找可变模板。它们随时都会出现至少让您可以更干净地执行此操作(例如,在不破坏类型安全性的情况下)。