C++ 如何将参数列表传递给c+;中的另一个函数+;?

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, ...

我对函数参数有问题。我有一个调用函数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, ...)
{
    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_列表
,那应该行得通。

不要使用可变数量的参数。这是一个愚蠢的想法,而且不安全。你为什么要做意大利面?你可能想查找可变模板。它们随时都会出现至少让您可以更干净地执行此操作(例如,在不破坏类型安全性的情况下)。