C++:将任意数量的参数传递给另一个函数
c++: pass arbitrary number of arguments to another function
我有一个函数,它接受 3 个参数。 其他函数的向量、void* 和任意参数列表。 该函数旨在将其 void* 和任意参数列表传递给列表中的每个函数,函数将自行处理这些函数。 这是我想要的一个例子:
typedef void (*fptr)(const void* userdata, ...);
void execute_all(vector<fptr> funcs, void* userdata, ...){
for (int i = 0;i<funcs.size();i++){
fptr func = funcs[i];
//execute func with userdata and ... from above.
//like (*func)(userdata, ...); which obviously doesnt work
}
}
我需要知道如何将所有参数转发到每个函数中。 不要担心确保兼容性。 我在其他地方处理。
谢谢
您不能直接将可变参数从一个可变参数函数传递到另一个可变参数函数。但是,您可以使调用的(内部)函数接受va_list
,然后传递该列表:
#include <cstdarg>
void callee(void *first, va_list args);
void caller(void *first, ...)
{
va_list args;
va_start(args, first);
callee(first, args);
va_end(args);
}
您无法有效地将可变参数函数的参数移动到另一个函数,但您可以将堆栈移动到另一个函数,因此它可以从堆栈本身中查看参数。Ansi C 引入va_list
就是为了这个目的。您可以有以下代码:
void fwd_function( int argCount, ... ) {
va_list vargs;
va_start( vargs, argCount );
impl_function( argCount, vargs );
va_end( vargs );
}
void impl_function( int argCount, va_list args ) {
int i;
for( i = 0; i < argCount; i++ ) {
int arg = va_arg( args, int );
}
}
您应该在 C++11 中使用可变参数模板和完美的转发。
如果你没有这个,AFAIK有一个Boost库可以为你模仿这些。
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 如果模板参数是另一个模板的实例化,则键入特征测试
- 将可变参数从一个函数传递到另一个函数
- 将一个宏传递到另一个宏而不是直接传递内容时会出现不需要的额外"空"参数
- 如何调用参数由另一个函数生成的函数?
- 如何在 VC++ 中通过引用传递另一个对象的方法(错误 C2664)
- 将函数上调整到基类参数的另一个
- 可以将算术表达式作为参数传递给一个函数来描述其中的逻辑
- 传递参数作为另一个函数的参数函数
- C libcurl-使用上一个卷曲的响应作为参数到另一个卷曲的参数
- 将模板变化函数及其参数传递到一个函数
- C++传递另一个方法作为参数
- C++:为默认方法参数调用另一个方法
- 如何让每个线程传递另一个参数
- C++:将部分专用模板的类型参数作为另一个模板类的成员类型
- 将多个参数从另一个类传递给线程函数
- 为什么 GCC 不允许我将模板参数用于另一个模板的参数?