[MOC 0606066]boost bindの一般的な使用方法の概要

2502 ワード

//moC062066
//blog.csdn.net/moc062066
///2012年4月13日14:40:26 bind自由関数、メンバー関数、関数オブジェクト
1.自由関数
1.1元の関数funにすべてのパラメータ1.2をバインド一部のパラメータ1.3をバインドパラメータdemoをバインドしない:
void fun( /* [in] */ int x, /* [in] */ int y)
{
	cout << x << "," << y << endl;
}


int main(int argc, char* argv[])
{
	/****************bind     ********************/
	//3,4
	boost::function< void(int,int) > fptr;
	//       ,       , function       :int,int
	//   function<>      bind        ,
	//    <>       bind        , bind  !!
	//bind            
	//_1         ,     “          ”。
	fptr = boost::bind(&fun,_1,_2);
	fptr(3,4);


	//5,3
	boost::function< void(int) > fptr2;
	fptr2 = boost::bind(&fun,_1,3);
	fptr2(5);


	//12,34
	boost::function< void(int) > fptr3;
	fptr3 = boost::bind(&fun,12,_1);
	fptr3(34);


	//8,9
	boost::function< void() > fptr4;
	fptr4 = boost::bind(&fun,8,9);
	fptr4();
	
	return 0;
}

2.バインド関数オブジェクトにインスタンスが必要
class Func {
public:
	void operator()( /* [in] */ int x, /* [in] */ int y) {
		cout << x << "," << y << endl;
	}
};


int main(int argc, char* argv[])
{
/***************************1*******************/
	//1
	Func f;
	boost::function fptr;
	fptr = boost::bind(&Func::operator(),&f,_1,_2);
	fptr(100,1);


	//
	//Func f;
	boost::function fptr2;
	fptr2 = boost::bind(&Func::operator(),&f,100,_1);
	fptr2(1);


	//Func f;
	boost::function fptr3;
	fptr3 = boost::bind(&Func::operator(),&f,_1,1);
	fptr3(100);


	//Func f;
	boost::function fptr4;
	fptr4 = boost::bind(&Func::operator(),&f,100,1);
	fptr4();


/*******************************2****************/
	//
	//Func f;
	boost::bind(f,45,67)();


	//Func f;
	boost::bind(f,_1,67)(45);


	//Func f;
	boost::bind(f,45,_1)(67);


	//Func f;
	boost::bind(f,_1,_2)(45,67);
}

3.クラスメンバー関数にインスタンスが必要
struct X
{
    bool f(int a);
};


X x;


shared_ptr p(new X);


int i = 5;


bind(&X::f, ref(x), _1)(i);		// x.f(i)
bind(&X::f, &x, _1)(i);			//(&x)->f(i)
bind(&X::f, x, _1)(i);			// (internal copy of x).f(i)
bind(&X::f, p, _1)(i);			// (internal copy of p)->f(i)