我一直在研究 boost::bind 和 boost::function。我可以通过举一个例子来最好地解释我的理解。鉴于这个示例代码片段:
void print(int x, int y){
cout << x << "\t" << y << endl;
}
int main(){
boost::function<void (int)> f = boost::bind (&print, _1, 2);
f(5);
}
显示 5 2.. 根据我的理解,绑定函数会创建一个函数对象,该对象可以将其一些参数绑定到一些常量参数(程序员的偏好)。
但是,我真正无法理解的是下面发布的源代码的这段代码片段:
boost::function<void (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr&)> f =
boost::bind (&SimpleOpenNIViewer::cloud_cb_, this, _1);
interface->registerCallback (f);
参数放置器是_1。不应该是 f(arg) 吗?为什么省略arg?
#include <pcl/io/openni_grabber.h>
#include <pcl/visualization/cloud_viewer.h>
class SimpleOpenNIViewer
{
public:
SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {}
void cloud_cb_ (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &cloud)
{
if (!viewer.wasStopped())
viewer.showCloud (cloud);
}
void run ()
{
pcl::Grabber* interface = new pcl::OpenNIGrabber();
boost::function<void (const pcl::PointCloud<pcl::PointXYZ>::ConstPtr&)> f =
boost::bind (&SimpleOpenNIViewer::cloud_cb_, this, _1);
interface->registerCallback (f);
interface->start ();
while (!viewer.wasStopped())
{
boost::this_thread::sleep (boost::posix_time::seconds (1));
}
interface->stop ();
}
pcl::visualization::CloudViewer viewer;
};
int main ()
{
SimpleOpenNIViewer v;
v.run ();
return 0;
}