繁体   English   中英

在C ++中包装变量参数函数

[英]Wrap a variable parameter function in C++

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

我想包装的功能的规格是

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

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

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

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

是的,如果您可以控制包装的函数,请从“ ...”更改为va_list。 以vprintf为例。

不确定是否可以将(...)换成另一个(...)

在某些平台上,使用恶意骇客可能会发生这种情况。 在x86上,参数从右到左被压入堆栈,因此,如果您要从堆栈中删除返回地址,则压入其他参数,然后替换它,就可以(理论上)做您想做的事情。 困难的部分是当您想要对包装器中的返回值进行某些操作时...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM