我有以下代码:
/* Function that takes a list and applies "function" to every element */
struct list *iter(struct list *l, void (*function)(struct list *a));
我有一个函数 foo(arg1, arg2, struct list *a
,我想将它应用到列表中的每个元素。
我怎样才能实现这样的行为?在支持闭包或柯里化(Currying)的编程语言中,我会部分地将 foo
应用于 arg1
和 arg2
,但这在 C 中似乎是不可能的。
是否可以让一个函数返回一个指向函数的指针bar(struct list *a) = foo(arg1, arg2, a)
?
最佳答案
不,在 C
中没有很好的方法来做到这一点。
可能的解决方案,按优先顺序排列:
- 以其他方式迭代结构,一种允许您自己应用函数的方式。
- 如果你能在编译时知道
arg1
和arg2
,只需编写一个调用foo()
的函数即可 - 将
arg1
和arg2
的值设置为全局值(或文件的静态值)并在调用iter()
之前设置它们。 (讨厌)在这种情况下适用关于任何线程的常见警告。 - 如果您正在使用 GCC 并且将始终使用 GCC,则可以使用 Nested Functions .
- Do something horrible with variadic functions
关于c - 部分应用 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23378215/