在 C 中是否可以部分应用高阶函数?
Is partial application of higher order functions possible in C?
假设我有一个函数
int myfun (int arg1, int arg2, int arg3, int arg4) {
/* function body */
}
并且我想编写一个具有签名
的函数pass_last_elements()
int (*)(int, int) pass_last_elements(int (*myfun)(int, int, int, int), int x3, int x4);
和 returns 两个参数的函数,我们称它为 fun_out
,这样 fun_out(x1, x2)
计算出与 myfun(x1, x2, x3, x4)
.
相同的结果
是否可以只用 C 来做这个?如果没有,是否可以使用一些编译器扩展来实现?
函数签名的广告,你输入函数标识符"inside":
int (* pass_last_elements(int (*myfun)(int, int, int, int), int x3, int x4) )(int, int);
至于:
returns a function of two arguments, let's call it fun_out, such that fun_out(x1, x2) computes the same result as myfun(x1, x2, x3, x4)
C语言没有闭包和lambdas等,所以不可能。您必须自己传递上下文(即变量 x1
和 x2
的状态),方法是向函数添加额外的上下文参数或使用全局变量。
假设我有一个函数
int myfun (int arg1, int arg2, int arg3, int arg4) {
/* function body */
}
并且我想编写一个具有签名
的函数pass_last_elements()
int (*)(int, int) pass_last_elements(int (*myfun)(int, int, int, int), int x3, int x4);
和 returns 两个参数的函数,我们称它为 fun_out
,这样 fun_out(x1, x2)
计算出与 myfun(x1, x2, x3, x4)
.
是否可以只用 C 来做这个?如果没有,是否可以使用一些编译器扩展来实现?
函数签名的广告,你输入函数标识符"inside":
int (* pass_last_elements(int (*myfun)(int, int, int, int), int x3, int x4) )(int, int);
至于:
returns a function of two arguments, let's call it fun_out, such that fun_out(x1, x2) computes the same result as myfun(x1, x2, x3, x4)
C语言没有闭包和lambdas等,所以不可能。您必须自己传递上下文(即变量 x1
和 x2
的状态),方法是向函数添加额外的上下文参数或使用全局变量。