在C中,是否可以转发可变参数函数的调用?如,
int my_printf(char *fmt, ...) {
fprintf(stderr, "Calling printf with fmt %s", fmt);
return SOMEHOW_INVOKE_LIBC_PRINTF;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,以上述方式转发调用显然不是必需的(因为你可以用其他方式记录调用,或者使用vfprintf),但是我正在处理的代码库要求包装器做一些实际的工作,并且没有没有(并且不能添加)类似于vfprintf的辅助函数.
[更新:基于迄今为止提供的答案,似乎存在一些混淆.用另一种方式表达问题:通常,你可以包装一些任意的可变参数函数而不修改该函数的定义.
我想创建一个神奇的宏,或任何东西,会产生这样的东西:
MAGICAL_MACRO(return_type, method_name, ...)
Run Code Online (Sandbox Code Playgroud)
应该像这样工作:
MAGICAL_MACRO(void, Foo, int a, int b)
Run Code Online (Sandbox Code Playgroud)
- >
virtual void Foo(int a, int b)
{
_obj->Foo(a, b);
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?恐怕不是.