我想用另一个函数(也采用可变数量的参数)包装 xmlrpc“调用”函数(它采用可变数量的参数)。我想简单地将传递给包装函数的可变数量的参数转发给 xmlrpc“调用”函数。 我知道如何使用 va_start 和 va_arg,但我真的不关心传入的值,我只是想将它们转发给包装函数。 这可能吗?
我想包装的函数的规范是
call(const char* url, const char* function, const char* paramSpec, void* result, ...);
我的包装器负责前三个参数和引用结果,它只需要将其额外参数转发给调用函数
最佳答案
不幸的是,没有办法通过 ...
语法为接受可变数量参数的函数提供完美的转发。这就是为什么最佳做法是根据采用 va_list
的函数来实现所有公共(public)变量参数列表函数,并为任何客户端代码提供这两个接口(interface)。这就是为什么标准库中有printf
和vprintf
,sprintf
和vsprintf
等。
如果没有 vcall
或类似的 va_list
则没有简单的方法来做你想做的事。唯一的可能性是解释其他参数,以根据提供的固定参数计算出传递给函数的可变参数列表中必须包含的内容,将可变参数列表中的所有参数拉入单独的变量中,并成为一个数字根据提取的参数的数量和类型,对 call
的可能显式调用的数量。不可能以完全普遍的方式做到这一点。
关于c++ - 在 C++ 中包装可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179461/