C/C++教程

c++11 function、bind()、lambda

本文主要是介绍c++11 function、bind()、lambda,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

function:

C++11提供的一个类模板,用来包装各种形式类型的可调用实体(函数指针,普通函数,函数对象,lambda表达式,bind绑定的对象)
绑定成员函数:function<返回类型(类名&,参数列表)> func = &类名::成员函数

bind():

可以看作函数适配器,可以把可调用对象和现有的参数先绑到一块,生成一个新的可调用实体,可用function接收。
作用:可以把含多元参数的可调用对象转成一元、二元、少元的可调用对象。
在使用一些STL算法的时候,比如find_if,可以做到减元的效果。
绑定成员函数:bind(&类名::成员函数,this/某个对象,参数列表)

lambda表达式

形式:[捕获列表](参数列表)->返回类型 { 函数体 } //[]{}至少有这俩
作用:可以减少参数,使得可以用一些STL算法,

int main()
{
	const int size = 4;
	vector<string> arr{"paul","kobe","xiangle"};
	auto lam = [size](const string& s){ return s.size() > 4; }
	find_if(arr.begin(),arr.end(),lam);	
}
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
using std::vector;
using std::string;
using std::function;
using std::placeholders::_1;
using std::cout;
using std::endl;


//仿函数
struct compare
{
	bool operator()(const string & arr)
	{
		return arr.size() > 4;
	}
};


bool coml(const string& s, int sizes)
{
	return s.size() > sizes;
}

int main()
{
	//使用函数对象,find_if
	vector<string> arr{"paul","kobe","xiangle"};
	vector<string>::iterator point = find_if(arr.begin(), arr.end(), compare());
	cout << *point << endl;


	//如果size参数化呢,那么find_if()只接受一个一元谓词,
	//(1)lambda
	const int size = 4;
	auto com = [size](const string& arry) { return arry.size() > size; };
	point = find_if(arr.begin(), arr.end(), com);
	cout << *point << endl;

	//(2)bind	
	function<bool(string)> func = bind(coml,_1,size);
	point =  find_if(arr.begin(), arr.end(), func);
	cout << *point << endl;




	//function bind
	class A 
	{
	public:
		int sum(int a, int b)
		{
			return a + b;
		}
		static int sum1(int a, int b)
		{
			return a + b;
		}
	};
	A a;
	//function包装成员函数,静态成员函数。
	function<int(A&,int, int)> f = &A::sum;   
	f(a,1, 2);
	function<int(int, int)> f = &A::sum1;

	//bind绑定成员函数,静态成员函数
	bind(&A::sum,&a, _1,2);
	bind(&A::sum1, _1, 2);
	
}
这篇关于c++11 function、bind()、lambda的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!