c++11 function 与bind 学习笔记

C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可 以调用的目标实体进行存储、复制和调用操作

见下面的例子

 1  /* ***********************************************
 2  Author :111qqz
 3  mail: renkuanze@sensetime.com
 4  Created Time :2018年07月19日 星期四 17时41分00秒
 5  File Name :bind.cpp
 6  ************************************************ */
 7  #include <functional>
 8  #include <iostream>
 9  using namespace std;
10  float foo( int x,int y,int z){return x+y+z+1.;}
11  int main()
12  {
13  	function<int(int,int)>func = foo;
14  	int y = 10;
15  	function<int(int)>fun = [&]( int value)->int
16  	{
17  		return 1+value+y;
18  	};
19  	cout<<func(15,4,9)<<endl;
20  	cout<<fun(8)<<endl;
21  	return 0;
22  }
23

std::bind 则是用来绑定函数调用的参数的,它解决的需求是我们有时候可 能并不一定能够一次性获得调用某个函数的全部参数,通过这个函数,我们可以将 部分调用参数提前绑定到函数身上成为一个新的对象,然后在参数齐全后,完成调 用

看下面的例子:

 1    
 2    #include <iostream>
 3    #include <functional>
 4    using namespace std;
 5    int FUN( int x,int y,int z)
 6    {
 7    	return x+y+z;
 8    }
 9    int main()
10    {
11    	using namespace std::placeholders;
12    	//int (*fp)(int ,int,int) = FUN;
13    	auto bindfoo = bind(FUN,_1,1,2);
14    	int ans = bindfoo(0);
15    	cout<<ans<<endl;
16    	return 0;
17    }
18