起因是昨天小伙伴在群聊中提问
话说
C 语言有没有可能用可变参数做科里化
于是我用 C++ 实现了一个不是真 currying 但是看起来像的东西…
#include <stdio.h>
int f(int x, int y) {
return x + y;
}
class G {
int x;
int(*f)(int, int);
public:
G(int(*f)(int, int), int x) {
this->f = f;
this->x = x;
}
int operator ()(int y) {
return f(x, y);
}
};
template <class a, class b, class c>
class Thing
{
b x;
a(*f)(b, c);
public:
Thing();
Thing(a(*f)(b, c), b x);
~Thing();
a operator()(c);
};
template <class a, class b, class c>
Thing<a, b, c>::Thing()
{
f = NULL;
x = (b)0;
}
template <class a, class b, class c>
Thing<a, b, c>::Thing(a(*f)(b, c), b x)
{
this->f = f;
this->x = x;
}
template <class a, class b, class c>
Thing<a, b, c>::~Thing()
{
}
template <class a, class b, class c>
a Thing<a, b, c>::operator ()(c y) {
return f(x, y);
}
int main() {
printf("%d", G(f, 1)(2));
printf("%d", Thing<int, int, int>(f, 1)(2));
return 0;
}
重载了 ()
运算符让对象方法调用看起来像函数调用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。