You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS 1 advertiseService接口中bool(T::*...)语法的作用是什么?

语法含义说明

你看到的bool(T::*srv_func)(MReq &, MRes &)是C++ 类非静态成员函数指针的标准声明语法,各部分的定义如下:

  • 开头的bool:对应回调函数的返回值类型
  • T::*:明确声明这是一个归属T类的指针,指向类的成员函数
  • srv_func:该函数指针参数的变量名
  • 尾部的(MReq &, MRes &):规定该成员函数必须接收两个引用类型的入参,依次是服务请求类MReq、服务响应类MRes

约束作用说明

这个语法确实是用来限制srv_func必须是T类的非静态成员函数:

  • 不能传入普通全局函数、静态成员函数,这类函数不需要绑定类实例即可调用,对应的函数指针声明不需要加T::*标识
  • 因为非静态成员函数调用时依赖类实例的this指针,所以这个API才需要同步传入obj参数作为回调绑定的类实例,实际触发回调时的调用逻辑等价于(obj->*srv_func)(请求对象, 响应对象)

ROS设计这个重载版本的advertiseService,就是为了支持开发者把服务回调逻辑封装在自定义类内部,避免全局函数污染命名空间,也方便回调函数访问类的内部状态。

内容的提问来源于stack exchange,提问作者wuxiekeji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:15:04