c++ - 在 C++ 中包装可变参数函数

标签 c++ variadic-functions wrapper

我想用另一个函数(也采用可变数量的参数)包装 xmlrpc“调用”函数(它采用可变数量的参数)。我想简单地将传递给包装函数的可变数量的参数转发给 xmlrpc“调用”函数。 我知道如何使用 va_start 和 va_arg,但我真的不关心传入的值,我只是想将它们转发给包装函数。 这可能吗?

我想包装的函数的规范是

call(const char* url, const char* function, const char* paramSpec, void* result, ...);

我的包装器负责前三个参数和引用结果,它只需要将其额外参数转发给调用函数

最佳答案

不幸的是,没有办法通过 ... 语法为接受可变数量参数的函数提供完美的转发。这就是为什么最佳做法是根据采用 va_list 的函数来实现所有公共(public)变量参数列表函数,并为任何客户端代码提供这两个接口(interface)。这就是为什么标准库中有printfvprintfsprintfvsprintf等。

如果没有 vcall 或类似的 va_list 则没有简单的方法来做你想做的事。唯一的可能性是解释其他参数,以根据提供的固定参数计算出传递给函数的可变参数列表中必须包含的内容,将可变参数列表中的所有参数拉入单独的变量中,并成为一个数字根据提取的参数的数量和类型,对 call 的可能显式调用的数量。不可能以完全普遍的方式做到这一点。

关于c++ - 在 C++ 中包装可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179461/

相关文章:

c++ - 在 C++ 中创建一个 Point 类

c++ - 如何在运行时改变QSqlQueryModel子类的数据模型?

c++ - 使用参数包解决重载问题

c# - 如何禁止在 C# 中复制公共(public)字段或属性

gd 的 php 包装器类

java - 使用 equals() 将包装类与原语进行比较会产生奇怪的行为

c++ - 为什么在 qtablewidget 的第一列中设置值时 gui 崩溃

c++ - Allegro 5 如何隐藏/卸载位图

c++ - 在可变参数模板中实现 STL 函数

c++ - 在 va_list 对象中包含第一个参数