是否可以绑定lambda函数的第二个参数

Is it possible to bind the second parameter of a lambda function?

本文关键字:第二个 参数 函数 lambda 绑定 是否      更新时间:2023-10-16

我是C++11 lambda的新手,希望通过绑定第二个参数将二进制lambda转换为一元lambda

auto lambda1 = [] (int a, int b) { return a+b; };
auto lambda2 = std::bind2nd(lambda1, 5);

编译失败

error: no type named 'first_argument_type' in 'struct main(int, char**)::<lambda(int, int)>'
     class binder2nd

如何做到这一点?

如果已经使用lambda表达式,只需使用另一个:

auto lambda2 = [&] (int i) {return lambda1(i, 5);};
#include <functional>
int main(int argc, char *argv[])
{
   auto lambda1 = [](int a, int b) { return a+b; };
   auto lambda2 = std::bind(lambda1, std::placeholders::_1, 5);
   //           ~~~~~~~^^^^~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^~~~
   return 0;
}

演示

也更喜欢使用std::bind而不是std::bind1ststd::bind2nd,因为两者在C++11中都已弃用,并计划在C++17中删除。