[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をバインドしない:
2.バインド関数オブジェクトにインスタンスが必要
3.クラスメンバー関数にインスタンスが必要
//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)