This piece o开发者_如何学Pythonf code fails to compile and I don't know if it is because it can not be done, lambdas do not inherit from binary_function, or it is just that I'm getting the syntax wrong
#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;
}
Use:
auto sumFive = std::bind(lambda, 5, std::placeholders::_1);
Please forget entirely about bind1st and binary_function, etc. Those were crutches in the old C++ because of the lack of lambdas and variadic templates. In C++11, use std::function and std::bind.
std::bind1st and std::bind are redundant in C++11. Just use another lambda:
auto lambda = [](int x, int y) { return x + y; };
auto sumFive = [&](int y) { return lambda(5, y); };
This is clearer and simpler (no need to know what std::bind does or what the std::placeholders are for), more flexible (it can support any expression, not just parameter binding), requires no support headers, and will probably compile a little faster too.
加载中,请稍侯......
精彩评论