(C++版)ROS2 bind函数解读

在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));

好了虽然我说不清,但是相信你已经明白了,我实在是看到全国没有这方面的文章啊

(C++版)ROS2 bind函数解读_第1张图片

你可能感兴趣的:(c++,ros2,机器人,嵌入式系统)