curry可以与lambda函数一起使用吗?

时间:2011-08-24 14:33:42

标签: c++ stl functional-programming c++11 lambda

这段代码无法编译,我不知道是不是因为它无法完成,lambdas不会从binary_function继承,或者只是因为我的语法错误

#include <functional>

int main(int argc, const char *argv[])
{
   auto lambda = [](int x, int y) -> int { return x + y; };
   auto sumFive = std::bind1st(lambda, 5); 

   return 0;
}

2 个答案:

答案 0 :(得分:24)

使用:

auto sumFive = std::bind(lambda, 5, std::placeholders::_1);

请完全忘记bind1stbinary_function等等。由于缺少lambdas和可变参数模板,这些都是旧C ++中的拐杖。在C ++ 11中,使用std::functionstd::bind

答案 1 :(得分:8)

std::bind1ststd::bind在C ++ 11中是多余的。只需使用另一个lambda:

auto lambda = [](int x, int y) { return x + y; };
auto sumFive = [&](int y) { return lambda(5, y); };

这更清晰,更简单(不需要知道std::bind做什么或std::placeholders是什么),更灵活(它可以支持任何表达式,而不仅仅是参数绑定),不需要支持标题,也可能会更快地编译。