光看书,总觉得bind不过是是一个万能的指针,自己动手写一个能接受bind作为参数的函数,才发现之前了解的只不过是bind的冰山一角,不求甚解bind的原理,实在惭愧。 现写个案例,以防自己忘记,也给看客提个醒。
void
print(
char* str){
std::cout<<str<<std::endl;
}
template<
class _Fn1>
inline _Fn1
callback(_Fn1 _Func)
{
//此处显式调用Fn1函数
char * p = "good gold";
_Func(p);
return (_Func);
}
int
main(
int argc,
char* argv[]){
char * p = "visit gold";
callback(boost::bind(print,p));
return 0;
}
此处会打印出的是“
visit gold”不含引号。
若将main函数改为如下:
int
main(
int argc,
char* argv[]){
callback(boost::bind(print,_1));
return 0;
}
则打印的是“good gold”不含引号。
分析原因就要查看bind的源代码,先粗略估计应该是bind作为对象保存了传入的参数,在函数调用处_Func(p);将会忽略掉p这个参数。