ROS回调函数的形参传递过程

例子

我们先随便看一个订阅器的回调函数:

void gpsCallback(const topic_demo::gps::ConstPtr &msg)
{  
    //计算离原点(0,0)的距离
    std_msgs::Float32 distance;
    distance.data = sqrt(pow(msg->x,2)+pow(msg->y,2));
    //float distance = sqrt(pow(msg->x,2)+pow(msg->y,2));
    ROS_INFO("Listener: Distance to origin = %f, state: %s",distance.data,msg->state.c_str());
}

开始的时候难以理解对于形参的传入方式。

个人理解

const topic_demo::gps::ConstPtr &msg

我们先来看没见过的::ConstPtr的定义

typedef boost::shared_ptr< ::topic_demo::gps_<ContainerAllocator> > Ptr;
typedef boost::shared_ptr< ::topic_demo::gps_<ContainerAllocator> const> ConstPtr;

这是一对类型定义,::ConstPtr可以理解为“指向常量消息的共享指针”,::Ptr也可以理解为“指向(可修改)消息的共享指针”。它只是一种基于智能指针的轻量级消息传递方式。根据传递消息的接收者是否需要修改消息来选择正确的。
::ConstPtr&可以理解为“引用一个指向常量消息的共享指针”,::Ptr&也可以理解为“引用一个指向(可修改的)消息的共享指针”。
这样的设计主要用于避免数据量较大的参数传递过程中拷贝析构函数进行复制操作。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值