如何在C ++中进行curry? [英] How can currying be done in C++?
本文介绍了如何在C ++中进行curry?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
什么是currying?
What is currying?
如何在c ++中进行currying?
How currying can be done in c++?
容器?
推荐答案
简单来说,currying需要一个函数 f(x,y)
并给定一个固定的 Y
,给出一个新函数 g(x)
其中
In short, currying takes a function f(x, y)
and given a fixed Y
, gives a new function g(x)
where
g(x) == f(x, Y)
$ b
这个新函数可以在只提供一个参数的情况下调用,并将调用传递给原来的 f
函数, Y
参数。
STL中的绑定器允许您对C ++函数执行此操作。例如:
The binders in the STL allow you do to this for C++ functions. For example:
#include <functional>
#include <iostream>
#include <vector>
using namespace std;
// declare a binary function object
class adder: public binary_function<int, int, int> {
public:
int operator()(int x, int y) const
{
return x + y;
}
};
int main()
{
// initialise some sample data
vector<int> a, b;
a.push_back(1);
a.push_back(2);
a.push_back(3);
// here we declare a function object f and try it out
adder f;
cout << "f(2, 3) = " << f(2, 3) << endl;
// transform() expects a function with one argument, so we use
// bind2nd to make a new function based on f, that takes one
// argument and adds 5 to it
transform(a.begin(), a.end(), back_inserter(b), bind2nd(f, 5));
// output b to see what we got
cout << "b = [" << endl;
for (vector<int>::iterator i = b.begin(); i != b.end(); ++i) {
cout << " " << *i << endl;
}
cout << "]" << endl;
return 0;
}
这篇关于如何在C ++中进行curry?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文