bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind.
bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等
_1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是占位符均可以。占位符不可以超过函数参数数量。
绑定普通函数:
.#include<boost/bind.hpp>
.#include<iostream>
.using namespace std;
.using namespace boost;
.
.void fun(int a,int b){
. cout << a+b << endl;
.}
.
.int main()
.{
. bind(fun,,)();//fun(1,2)
. bind(fun,_1,_2)(,);//fun(1,2)
. bind(fun,_2,_1)(,);//fun(2,1)
. bind(fun,_2,_2)(,);//fun(2,2)
. bind(fun,_1,)();//fun(1,3)
.}
.
.
20.3
21.3
22.3
23.4
24.4 绑定成员函数:
.#include<boost/bind.hpp>
.#include<iostream>
.#include<vector>
.#include<algorithm>
.using namespace boost;
.using namespace std;
.
.struct point
.{
. int x,y;
. point(int a=,int b=):x(a),y(b){}
. void print(){
. cout << "(" << x << "," << y << ")\n";
. }
. void setX(int a){
. cout << "setX:" << a << endl;
. }
. void setXY(int x,int y){
. cout << "setX:" << x << ",setY:" << y << endl;
. }
. void setXYZ(int x,int y,int z){
. cout << "setX:" << x << ",setY:" << y << "setZ:" << z << endl;
. }
.};
.
.int main()
.{
. point p1,p2;
. bind(&point::setX,p1,_1)();
. bind(&point::setXY,p1,_1,_2)(,);
. bind(&point::setXYZ,p2,_1,_2,_3)(,,);
. vector<point> v();
. //for_each的时候只需要_1就可以了
. for_each(v.begin(),v.end(),bind(&point::print,_1));
. for_each(v.begin(),v.end(),bind(&point::setX,_1,));
. for_each(v.begin(),v.end(),bind(&point::setXY,_1,,));
. for_each(v.begin(),v.end(),bind(&point::setXYZ,_1,,,));
.}
.
.setX:
.setX:,setY:
.setX:,setY:20setZ:
.(,)
.(,)
.(,)
.(,)
.(,)
.(,)
.(,)
.(,)
.(,)
.(,)
.setX:
.setX:
.setX:
.setX:
.setX:
.setX:
.setX:
.setX:
.setX:
.setX:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
.setX:,setY:20setZ:
http://www.cnblogs.com/lzjsky/archive/2011/09/07/2169820.html