对于只在少数几个地方使用的简单操作,lambda表达式是最有用的。
如果lambda的捕获列表为空,通常可以用函数替代。
但是对于捕获局部变量的lambda,用函数来代替就不是那么容易了
有些泛型算法只能接受一元谓词,为了让普通函数代替lambda表达式,必须解决如何传递一个形参的问题
标准库bind函数
定义在头文件functional中,可以将bind函数看做一个通用的函数适配器,接受一个可调用对象,生成一个新的可调用对象来适应原对象的参数列表。
以下为C++ PRIMER 5th 10.24习题程序:
#include<string> #include<functional> #include<vector> #include<algorithm> #include<iostream> using namespace std; using namespace std::placeholders; bool check_size(const string &s, string::size_type sz) { return s.size() >= sz; } /**************************绑定check_size的sz参数***********************************/ int main() { string s("Hello!"); vector<int> nums{1,2,3,5,4,6,3,7}; auto check = bind(check_size, _1, _2); for (auto tt = nums.begin(); tt != nums.end(); tt++) { if (!check(s, *tt)) { cout << *tt; } } }