光看书,总觉得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这个参数。