C++11----bind

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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章