#include <functional>
#include <iostream>
using namespace std;
int add (int a ,int b){
return a + b ;
}
int main(){
//函数指针
int (*padd)(int , int) =add;
cout << padd(3,4) <<endl;
return 0 ;
}
#include <iostream>
#include <funtional>
using namespace std;
int main (){
function<int (int ,int)> f = [](int a ,int b){return a + b ;};
cout << f(1 , 2 ) <<endl;
return 0 ;
}
3. 接收静态成员函数
#include <iostream>
#include <functional>
using namespace std;
class stu{
public:
static int run(string name ,int age){
cout <<age <<" 的 "<< name << " 在跑步... "<< endl;
}
};
int main (){
function <int (string ,int)> f = stu::run;
f("奥巴马" , 19);
return 0 ;
}
#include <iostream>
#include <functional>
using namespace std;
int add3(int a ,int b){
cout <<"执行了add函数" << endl;
return a + b;
}
int main (){
//可以看成是把p 绑定到add3上, 以后使用p() 等同于 add3()
//但是bind的一个好处是,参数不用在后续调用p()的时候传递了,因为在绑定的时候已经传递进来了。
auto p1 = bind(add3 , 3 ,4 );
int result1 = p1();
cout <<"result1 = "<< result1 << endl;
//也可以是用function来接收,但是由于参数的值已经在bind的时候传递进去了,所以接收的时候
//function的参数可以使用() 表示无参。否则在调用p1的时候,还必须传递参数进来
function<int ()> p2 = bind(add3 , 5 ,4 );
int result2 =p2();
cout <<"result2 = "<< result2 << endl;
return 0 ;
}
2. 当定成员函数
bind 也可以 bind 类中的某个成员函数
#include <iostream>
#include <functional>
#include <string>
using namespace std;
class stu{
public :
int run(string name ,int age){
cout <<age << " 的 " << name << "在跑步" << endl;
return 10;
}
};
int main (){
stu s ;
function<int ()> f= bind(&stud::run , s , "张三" ,18);
f();
//****************************************************
//使用auto 完成类型推断。
auto b = bind(&stu::run,s,"张三",18 );
b();
return 0 ;
}