c - 部分应用 C 中的函数

标签 c function pointers currying

我有以下代码:

/* 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 应用于 arg1arg2,但这在 C 中似乎是不可能的。

是否可以让一个函数返回一个指向函数的指针bar(struct list *a) = foo(arg1, arg2, a)

最佳答案

不,在 C 中没有很好的方法来做到这一点。

可能的解决方案,按优先顺序排列:

  1. 以其他方式迭代结构,一种允许您自己应用函数的方式。
  2. 如果你能在编译时知道 arg1arg2,只需编写一个调用 foo() 的函数即可
  3. arg1arg2 的值设置为全局值(或文件的静态值)并在调用 iter() 之前设置它们。 (讨厌)在这种情况下适用关于任何线程的常见警告。
  4. 如果您正在使用 GCC 并且将始终使用 GCC,则可以使用 Nested Functions .
  5. Do something horrible with variadic functions

关于c - 部分应用 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23378215/

相关文章:

c++ - 如何在不重建数组的情况下将 vector<vector<int>> 转换为 int**?

c - 释放对象的问题

c - 重新分配后如何更改保存的地址

python - C函数执行在哪里停止

excel - VSTO向自定义功能区/组添加内置功能

Python 函数变量与类

c - 如何在 C 中的结构中包含动态数组?

在 X11 事件循环中可以捕获操纵杆/游戏 handle 事件吗?

function - 在 Powershell 中从文本文件中随机化的更好方法

c - 阵列到结构类型转换