1:实例
#include <iostream>
#include <functional>
using namespace std;
int add(int x,int y){
return x+y;
}
int dv(int x,int y){
return x-y;
}
struct pp{
int data;
double source;
};
class Mupp{
public:
void func(){
cout<<"成员函数"<<endl;
}
};
int main() {
auto jia=bind(add,2,3);
cout<<jia()<<endl;
auto jia1=bind(dv,10,placeholders::_1);//placeholders是占位符
cout<<jia1(2)<<endl;
auto jian=bind(dv,placeholders::_1,placeholders::_2);
cout<<jian(10,2)<<endl;
pp p ={2,3.0};
auto oj = bind(&pp::data,p);
cout<<oj()<<endl;
Mupp upp;
auto dj = bind(&Mupp::func,upp);
dj();
return 0;
}
2:如果有重载的情况,尽量不要使用bind,若实在需要,则:
//解决冲突
auto fu=bind(int (*)(int x,int y)add,10,10);
Mupp mup;
auto ff =bind(int (Mupp::*)(int x,int y))&Muppp::add,mup,10,20);
3:bind+function
//统一,打平
void f1(){
cout<<"f1"<<endl;
}
void f2(int a){
cout<<"f2"<<endl;
}
class fo{
public:
void f3() {
cout << "fo::f3" << endl;
}
};
class foo{
public:
void f4(int a) {
cout << "f4" << endl;
}
};
function<void(void)> f;
f=f1;
f();
f=bind(f2,10);
f();
fo o;
f=bind(&fo::f3,o);
f();
foo oo;
f=bind(&foo::f4,oo,10);
f();