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就会被执行了.