boost bind库一个重要的知识点

来源:互联网 发布:js escape 解码 编辑:程序博客网 时间:2024/05/22 02:33
bind(&function,_1,_2)(arg1,arg2);


以这种形式bind的话,会立即将两个参数传给函数,并执行这个函数.
从本质上讲,bind是建立一个函数对象(这个函数对象可以赋给boost::function对象),再将两个参数传过去.
但是如果直接将两个参数放到占位符相应位置
bind(&function,arg1,arg2);
后边没有绑定参数的话,它只建立一个函数对象,而不会执行这个上参数.


下边看这个例子:
std::sort(vec.begin(),vec.end(),boost::bind(std::less<unsigned int>(),boost::bind(&personal_info::age,_1),boost::bind(&personal_info::age,_2),));


那这次大家说这个std::less<unsigned int>();有没有被执行呢?怎么解释呢?我对内部机制不了解,这里其实是会被执行的,这里再给个简单一些的例子.


void general_function(int arg1,int arg2,int arg3){    std::cout<<arg1+arg2+arg3;}int add(int a,int b){    return a+b;}    boost::bind(                &general_function,                boost::bind(&add,                            _1,                            2),                2,                3                )(1);


这个形式就好看了,这里呢从形式上来讲,外层的bind已经给提供参数了,传递进去又提供给里层的bind,所以general_function就会被执行了.