在看C++标准程序库书中,看到bind1st,bind2nd及bind的用法,当时就有一种熟悉感,仔细想了下,是F#里提到的柯里化。下面是维基百科的解释:在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
下面来看一个简单的例子。
void mult(int& a, int b) { cout << "a:" << a << " b:" << b << endl; a += b; } void test24() { using namespace std::placeholders; vector<int> list; int i = 0; generate_n(back_inserter(list), 10, [&i](){ return i++; }); for_each(list.begin(), list.end(), bind(mult, _1, 10)); for_each(list.begin(), list.end(), bind(mult, 100, _1)); copy(list.begin(), list.end(), ostream_iterator<int>(cout, " ")); }