这段代码无法编译,我不知道是不是因为它无法完成,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;
}
答案 0 :(得分:24)
使用:
auto sumFive = std::bind(lambda, 5, std::placeholders::_1);
请完全忘记bind1st
和binary_function
等等。由于缺少lambdas和可变参数模板,这些都是旧C ++中的拐杖。在C ++ 11中,使用std::function
和std::bind
。
答案 1 :(得分: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); };
这更清晰,更简单(不需要知道std::bind
做什么或std::placeholders
是什么),更灵活(它可以支持任何表达式,而不仅仅是参数绑定),不需要支持标题,也可能会更快地编译。