柯里化可以与lambda函数一起使用吗?

Can currying be used with lambda functions?

本文关键字:一起 函数 lambda      更新时间:2023-10-16

这段代码未能编译,我不知道是否因为它不能做,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;
}

使用说明:

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

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

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做什么),更灵活(它可以支持任何表达式,而不仅仅是参数绑定),不需要支持头文件,并且可能会编译得更快一些。

相关文章: