boost::bind

 

bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind.
bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等
_1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是占位符均可以。占位符不可以超过函数参数数量。
绑定普通函数:

 

1.#include<boost/bind.hpp>  
2.#include<iostream>  
3.using namespace std;  
4.using namespace boost;  
5.  
6.void fun(int a,int b){  
7.        cout << a+b << endl;  
8.}  
9.  
10.int main()  
11.{  
12.        bind(fun,1,2)();//fun(1,2)  
13.        bind(fun,_1,_2)(1,2);//fun(1,2)  
14.        bind(fun,_2,_1)(1,2);//fun(2,1)  
15.        bind(fun,_2,_2)(1,2);//fun(2,2)  
16.        bind(fun,_1,3)(1);//fun(1,3)  
17.}  
18.  
19.  
20.3  
21.3  
22.3  
23.4  
24.4  





绑定成员函数:
1.#include<boost/bind.hpp>  
2.#include<iostream>  
3.#include<vector>  
4.#include<algorithm>  
5.using namespace boost;  
6.using namespace std;  
7.  
8.struct point  
9.{  
10.    int x,y;  
11.    point(int a=0,int b=0):x(a),y(b){}  
12.    void print(){  
13.        cout << "(" << x << "," << y << ")\n";  
14.    }  
15.    void setX(int a){  
16.        cout << "setX:" << a << endl;  
17.    }  
18.    void setXY(int x,int y){  
19.        cout << "setX:" << x << ",setY:" << y << endl;  
20.    }  
21.    void setXYZ(int x,int y,int z){  
22.        cout << "setX:" << x << ",setY:" << y << "setZ:" << z << endl;  
23.    }  
24.};  
25.  
26.int main()  
27.{  
28.    point p1,p2;  
29.    bind(&point::setX,p1,_1)(10);  
30.    bind(&point::setXY,p1,_1,_2)(10,20);  
31.    bind(&point::setXYZ,p2,_1,_2,_3)(10,20,30);  
32.    vector<point> v(10);  
33.    //for_each的时候只需要_1就可以了  
34.    for_each(v.begin(),v.end(),bind(&point::print,_1));  
35.    for_each(v.begin(),v.end(),bind(&point::setX,_1,10));  
36.    for_each(v.begin(),v.end(),bind(&point::setXY,_1,10,20));  
37.    for_each(v.begin(),v.end(),bind(&point::setXYZ,_1,10,20,30));  
38.}  
39.  
40.setX:10  
41.setX:10,setY:20  
42.setX:10,setY:20setZ:30  
43.(0,0)  
44.(0,0)  
45.(0,0)  
46.(0,0)  
47.(0,0)  
48.(0,0)  
49.(0,0)  
50.(0,0)  
51.(0,0)  
52.(0,0)  
53.setX:10  
54.setX:10  
55.setX:10  
56.setX:10  
57.setX:10  
58.setX:10  
59.setX:10  
60.setX:10  
61.setX:10  
62.setX:10  
63.setX:10,setY:20  
64.setX:10,setY:20  
65.setX:10,setY:20  
66.setX:10,setY:20  
67.setX:10,setY:20  
68.setX:10,setY:20  
69.setX:10,setY:20  
70.setX:10,setY:20  
71.setX:10,setY:20  
72.setX:10,setY:20  
73.setX:10,setY:20setZ:30  
74.setX:10,setY:20setZ:30  
75.setX:10,setY:20setZ:30  
76.setX:10,setY:20setZ:30  
77.setX:10,setY:20setZ:30  
78.setX:10,setY:20setZ:30  
79.setX:10,setY:20setZ:30  
80.setX:10,setY:20setZ:30  
81.setX:10,setY:20setZ:30  
82.setX:10,setY:20setZ:30  

 

http://www.cnblogs.com/lzjsky/archive/2011/09/07/2169820.html

posted @ 2014-05-13 15:24  vivianC  阅读(211)  评论(0编辑  收藏  举报