• 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 << ")
    ";  
    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

  • 相关阅读:
    一、反射机制介绍_Class 对象获取
    六、.XPATH 技术_快速获取节点
    五、.DOM4J 方式解析 XML 数据
    四、.JDOM 解析 XML 数据
    三、SAX 方式解析 XML 数据
    二、DOM方式解析XML
    一、Schema验证XML
    三、线程同步Synchronized
    二、线程状态
    JDK8Lambda和方法的引用
  • 原文地址:https://www.cnblogs.com/viviancc/p/3725623.html
Copyright © 2020-2023  润新知