假设我有一个指向函数的指针_stack_push(stack* stk, void* el)
。我希望能够打电话curry(_stack_push, my_stack)
并返回一个只需要的函数void* el
。我想不出一种方法来做到这一点,因为 C 不允许运行时函数定义,但我知道这里有比我聪明得多的人:)。有任何想法吗?
我找到了 Laurent Dami 的一篇论文,讨论了 C/C++/Objective-C 中的柯里化:
使用柯里化函数提高 C/C++/Objective-c 中函数的可重用性
对它如何在 C 中实现感兴趣:
我们当前的实现使用现有的 C 结构来添加柯里化机制。这比修改编译器要容易得多,并且足以证明柯里化的兴趣。然而,这种方法有两个缺点。首先,柯里化函数无法进行类型检查,因此需要谨慎使用以避免错误。其次,柯里化函数无法知道其参数的大小,并且将它们视为全部整数大小。
该论文不包含实现curry()
,但你可以想象它是如何实现的函数指针 and 可变参数函数.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)