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

时间:2013-12-08 16:33:38

标签: c++ function arguments

我的函数参数有问题。我有一个函数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);
}

3 个答案:

答案 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 / vprintfexecl / execv(但不是fork / vfork!)。