传递具有未确定数量的参数的函数,并使用可变参数调用它
我想创建一个函数“lazy”,它接受一个具有未确定数量的参数作为参数的函数。 我需要什么类型或必须完成哪些演员表?
然后我想在函数“evaluate”中执行该事情。 然后我如何将之前传递的参数传递给传递函数指针的“lazy”函数?
一些代码来说明我的问题:
char *function_I_want_to_call(void *foo, type bar, ...); // the arguments are unknown to lazy() and evaluate() typedef struct { ??? func; va_list args; } lazy_fcall; void lazy(lazy_fcall *result, ??? func, ...) { // which type do I need here? va_start(result->_args, fund); result->func = func; } void *evaluate(lazy_fcall *to_evaluate) { return to_evaluate->func(expand_args(to_evaluate->args)); // what do I have to write there to expand the va_list? It's C, not C++11... } int main () { lazy_fcall lazy_store; lazy(&lazy_store, function_I_want_to_call, "argument_1", "argument_2"); // ... printf("%s", (char *)evaluate(&lazy_store)); }
或者这样的事情是不可能的? 还有哪些其他可能性?
您无法将va_list
扩展为单独的参数。 您要调用的函数必须能够将va_list
作为参数。 参见例如printf
与vprintf
。
此外,正如caf所指出的,你不能存储va_list
,因为一旦lazy
函数返回,它所指向的参数将无效。 尝试使用va_list
会导致未定义的行为和各种怪异。