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)
请完全忘记bind1st
和binary_function
等等.由于缺少lambdas和可变参数模板,这些都是旧C++中的拐杖.在C++ 11中,使用std::function
和std::bind
.
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::bind
或std::placeholders
用于什么),更灵活(它可以支持任何表达式,而不仅仅是参数绑定),不需要支持头,并且可能也会更快地编译.