在c ++中处理va_args

Max*_*rai 6 c++ arguments function

我有一个功能A(...)B(...).现在,我要打电话BA,任何方法来传递...A进入B?伪代码:

void A(...)
{
   // Some operators
   B(...); // Instead of ... I need to pass A's args
}
Run Code Online (Sandbox Code Playgroud)

ps我知道这可以使用宏完成,但功能如何.

ken*_*ytm 7

你无法转发va_args.你只能转发va_list.

void vB(int first, va_list ap)
{
   // do stuff with ap.
}

void B(int first, ...)
{
   va_list ap;
   va_start(ap, first);
   vB(first, ap);
   va_end(ap);
}

void A(int something_else, int first, ...)
{
   va_list ap;
   va_start(ap, first);
   vB(first, ap);       // <-- call vB instead of B.
   va_end(ap);
}
Run Code Online (Sandbox Code Playgroud)

(这也是vprintf存在功能的原因.)


如果您使用的是C++ 11,则可以使用具有完美转发的可变参数模板执行此操作:

template <typename... T>
void A(T&&... args)
{
    B(std::forward<T>(args)...);
}
Run Code Online (Sandbox Code Playgroud)