传递带有不确定数量的参数的函数,并使用可变参数调用它

布韦比

我想创建一个函数“ 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));
}

还是这样的事情是不可能的?还有其他可能性吗?

一些程序员哥们

您不能将a扩展va_list为单独的参数。您要调用的函数必须能够接受va_listas参数。例如参见printfvprintf


另外,正如caf所指出的,您不能存储va_list,因为一旦lazy函数返回,“指向”的参数将无效尝试使用va_list会导致不确定的行为和各种各样的怪异现象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何传递方法并使用可变数量的参数调用它

如何将不确定数量的参数传递给console.log调用?

创建具有不确定数量参数的存储过程

Kotlin高阶函数传递一个带有可变数量参数的函数作为参数

将可变数量的参数传递给函数,然后使用这些参数在函数中调用函数

如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

Mockito使用参数匹配器来调用带有可变数量参数的方法

具有固定数量的参数(由整数确定)的函数

带有可变数量参数的 Ruby 调用系统或 exec

CakePHP,Shell:如何定义不确定数量的参数

使用带有可变参数的函数的问题

Java中是否可能有不确定数量的类型参数?

如何创建带有可变数量的参数的函数变量?

创建带有可变数量参数的函数

如何将一个或多个(不确定数字)参数传递给函数?

如何在不确定数量的参数上使用LIKE和%与pymssql?

在C ++中使用带有参数类型检查的可变参数模板在编译时获取函数的参数数量

如何将可变参数传递给基于参数数量调用特定函数的函数?

如何在另一个宏中定义一个带有不确定数量参数的宏?

调用函数作为带有参数的参数传递

将函数传递给指令,然后使用参数调用它

带有可变类型的可选参数的调用函数

当输入参数数量未知时,使用可变数量的输入参数进行函数调用

'std :: thread'如何确定传递给构造函数的可变参数的数量

不确定如何使用另一个类的对象创建带有参数的构造函数

<ui:include>中的参数化方法调用带有可变数量的方法参数

C ++:如何在可变参数模板参数上调用带有类型参数的函数?

c ++ 11:使用向量的元素调用可变参数函数,并自动推导参数数量

函数调用中带有参数的传递类型