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

ton*_*ian 18 c++ lambda functional-programming stl c++11

这段代码无法编译,我不知道是不是因为它无法完成,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;
}
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 24

使用:

auto sumFive = std::bind(lambda, 5, std::placeholders::_1);
Run Code Online (Sandbox Code Playgroud)

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


Ric*_*ith 8

std::bind1st并且std::bind在C++ 11中是多余的.只需使用另一个lambda:

auto lambda = [](int x, int y) { return x + y; };
auto sumFive = [&](int y) { return lambda(5, y); };
Run Code Online (Sandbox Code Playgroud)

这更清晰,更简单(不需要知道它是什么std::bindstd::placeholders用于什么),更灵活(它可以支持任何表达式,而不仅仅是参数绑定),不需要支持头,并且可能也会更快地编译.