在ros2的发布者节点里面有这么一句话:估计没有学过C++的人不太理解,这里我就发发好心帮忙解读一下
timer_ = this->create_wall_timer(500ms, std::bind(&MinimalPublisher::timer_callback, this));
timer_ = this->create_wall_timer(500ms, std::bind(&MinimalPublisher::timer_callback, this));
首先create_wall_timer(param1,param2)这个函数的用法是:
第一次参数param1是多少时间间隔执行一次param2函数,默认单位是ms毫秒,你可以填写500ms,或者1s,(好像1s也可以);
第二个参数是一个函数名称;
首先:bind本来就是一个函数,所以这参数肯定可以看出来是一个函数了,这个函数的格式是:
bind(函数名称,参数列表);
假设不用这个函数,就没有办法在这个地方往timer_callback函数传递参数了。
我只要告诉你this是timer_callback的隐含参数,你就全明白了哈哈哈哈,一般来说一个函数括号里面的那些参数是显式参数例如fun1(int a,int b),这个a,b都是显示参数,但是在处理类的成员函数的时候,还有隐含参数,那就是类的对象,一个成员函数只有指定了类的对象,这个时候成员变量确定了,成员函数才会是唯一的。
一般而言这个参数是this,例如this->timer_callback(),但是也可以是其他类的对象,例如
class mynode::public rclcpp::Node{ };
mynode node1,node2;
既可以是timer_ = this->create_wall_timer( 500ms, std::bind(&MinimalPublisher::timer_callback, this));
也可以是timer_ = this->create_wall_timer( 500ms, std::bind(&MinimalPublisher::timer_callback, &node1));
也可以是timer_ = this->create_wall_timer( 500ms, std::bind(&MinimalPublisher::timer_callback, &node2));
好了虽然我说不清,但是相信你已经明白了,我实在是看到全国没有这方面的文章啊