有没有办法用va_args参数包装函数?

2r2*_*r2w 5 c

有一个功能:

void some_function(int id,...);
Run Code Online (Sandbox Code Playgroud)

问题:有没有办法包装这个功能?这意味着得到这样的东西:

void wrapped_some_function(int id,...)
{
   //do smth
   some_function(id,...);
}
Run Code Online (Sandbox Code Playgroud)

ugo*_*ren 5

与海湾合作委员会,__builtin_apply_args并且__builtin_apply,记录在这里,可以做到这一点.
对于标准C,没有办法(其他答案建议可以起作用,但它不是你所要求的100%).
但是,如果有一个变化some_function即得到va_list(就像vprintf是一个变化printf),你可以使用它.


Xeo*_*Xeo 5

因为这也被标记为 C++: C++11 ftw。

#include <utility> // forward

template<class... Args>
void wrapped_some_function(int id, Args&&... args)
{
   //do smth
   some_function(id, std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)