Subscribe的第四个参数用法
看别人的代码真的是很好的学习过程啊
之前用Subscribe订阅的时候都是简单的用法形如:
ros::Subscriber sub = node.subscribe<uhf_rfid_api::UhfRfid>("messageepc", , rfid_callback) ;
这样只用三个参数。
然后在实际中,如果想要给回调函数传参数可以用C++ 的boost库中的boost::bind() 函数,如:
image_transport::Subscriber sub = it.subscribe(topic_root + "/camera/image", , boost::bind(image_callback, _1, &pub_vt));
这里,boost::bind中的第一个参数是回调函数名,第二个 _1 是一个占位符,因为回调函数image_callback的第一个参数是msg,要给它留位置。第三个,就是传的一个参数。以此扩展,如果想要传两个参数,这样:boost::bind(image_callback, _1, &pub_vt, &pub_odo),不要把_1当做参数个数哈
然后在回调函数里面,这样用:
void image_callback(sensor_msgs::ImageConstPtr image, ros::Publisher * pub_vt)
就可以把参数写在第二个实参的位置了O(∩_∩)O
然后来说今天的重点,我学到的第四个参数的用法,先上示例:
ros::Subscriber mysub = nh.subscribe("/move_cmd", , &Robot::moveCallback, &tars);
在API里的原型是这样的:
template<class M , class T >
Subscriber ros::NodeHandle::subscribe(const std::string & topic,
uint32_t queue_size,
void(T::*)(M) fp,
T * obj,
const TransportHints & transport_hints = TransportHints()
) [inline]
看上面原型要注意的是回调函数,应该是和第四个参数的在同一个类中,上面的例子是都在类T中,并且fp和obj都是指针类型 * 的。
解释下用法,第四个参数的T* obj是将类T的对象实例的指针传给同类的回调函数,void(T::*)(M) fp。因此在实例类obj中,如果改了一个变量的值,在回调函数中也能体现出来。这样,就相当于类中使用全局变量了。
好了,解释完了,放我实现的栗子:
void Robot::moveCallback(const fsm_robot::rcmd_move msg)
{
cmd_int = n;
n++;
}
这里,cmd_int就是类实例中中的全局变量了
Subscribe的第四个参数用法的更多相关文章
- bootstrap快速入门笔记(四)-less用法指南, mixin和变量
一,less变量,less文件 1.bootstrap.less 这是主要的 Less 文件.该文件中导入了一些其他的 less 文件.该文件中没有任何代码. 2.forms.less 这个 Less ...
- @GeneratedValue 四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里 ...
- canvas绘制二次贝塞尔曲线----演示二次贝塞尔四个参数的作用
canvas中绘制二次贝塞尔曲线的方法为ctx.quadraticCurveTo(x1,y1,x2,y2); 四个参数分别为两个控制点的坐标.开始点即当前canvas中目前的点,如果想从指定的点开始, ...
- margin标记可以带一个、二个、三个、四个参数,各有不同的含义。
margin标记可以带一个.二个.三个.四个参数,各有不同的含义. margin: 20px;(上.下.左.右各20px.) margin: 20px 40px;(上.下20px:左.右40px.) ...
- hibernate篇章四-- Hibernate配置文件中hiberante.hbm2ddl.auto四个参数的配置
我们在搭建环境的时候,在配置文件中有一个属性标签为: <property name="hibernate.hbm2ddl.auto"> </propert ...
- Hibernate配置文件中hiberante.hbm2ddl.auto四个参数的配置
我们在搭建环境的时候,在配置文件中有一个属性标签为: <property name="hibernate.hbm2ddl.auto"> </propert ...
- php中strstr、strrchr、substr、stristr四个函数用法区别
php中strstr.strrchr.substr.stristr四个函数用法区别: php中strstr strrchr substr stristr这四个字符串操作函数特别让人容易混淆,常用的是s ...
- 轨迹系列5——验证轨迹GPS坐标转换为本地坐标的四/七参数是否准确的一种方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 目前对多个项目轨迹不准确的情况做了排查,发现导致轨迹偏移百分 ...
- DAX/PowerBI系列 - 查询参数用法详解(Query Parameter)
PowerBI - 查询参数用法详解(Query Parameter) 很多人都不知道查询参数用来干啥,下面总结一下日常项目中常用的几个查询参数的地方.(本人不太欢hardcode的东西) 使用查询 ...
随机推荐
- CentOS 6.5 64位 安装zabbix-2.2.0
安装环境: VM 10 + CentOS-6.5-x86_64-minimal 虚拟机网络是NAT方式, 动态IP Xshell登录到Centos操作 刚装的centos,啥都没有,先配一下yum 首 ...
- [数据结构与算法]RED-BLACK(红黑)树的实现TreeMap源码阅读
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 虚拟机安装Centos64位Basic Service后 ifconfig查看无ip
vi /etc/sysconfig/network-scripts/ifcfg-eth0 将 ONBOOT="no" 改为 ONBOOT="yes" 保存后: ...
- GitHub详细教程(转载)
1 Git详细教程 1.1 Git简介 1.1.1 Git是何方神圣? 1.1.2 重要的术语 1.1.3 索引 1.2 Git安装 1.3 Git配置 1.3.1 用户信息 1.3.2 高亮显示 1 ...
- spring注入简记
我们知道对象是交给容器来管理的那么 init() destroy():可以在bean配置中设置对象初识化前执行和销毁后执行 int-delay=""表示是否延迟实例化即容器实例时还 ...
- MonkeyRunner学习(1)测试连接
前期的环境搭建详见:http://www.cnblogs.com/peng-lan/p/5388488.html 1.打开模拟器 打开模拟器有两种方法,正常的在eclipse 中启动就不介绍了 另一种 ...
- 【Todo】Nginx架构学习
要进行Web服务,绕不开的就是Nginx.这已经是大型网站的标配.对Nginx进行一定程度的深入学习. http://www.ituring.com.cn/article/4436 http://bl ...
- (转)Thread.setDaemon设置说明
本想搜下python多线程里的setDaemon,发现了这篇文章写得很不错:http://blog.csdn.net/m13666368773/article/details/7245570 Thre ...
- Bootstrap段落(正文文本)
一.Bootstrap段落特点 段落是排版中另一个重要元素之一.在Bootstrap中为文本设置了一个全局的文本样式(这里所说的文本是指正文文本): 1.全局文本字号为14px(font-size). ...
- CSS3_概述、发展史、模块介绍、与浏览器之间的关系
一.CSS3概述和CSS3的发展史: 1.css3概述: CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主流浏览器chrome.safari. ...