bool(T::* …) 有什么作用?
从 ROS 1 开始node_handle.h,某个 API 被指定为:
template<class T, class MReq, class MRes>
ServiceServer NodeHandle::advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T* obj)
srv_func是此服务的回调,MReq是请求类,MRes是结果类。obj是因为这是回调的类成员版本。
有人可以解释一下这个语法bool(T::*...是什么意思吗?是否只是强制执行srv_func必须是 的类成员T,而不是任何旧函数?
回答
template<class T, class MReq, class MRes> ServiceServer NodeHandle::advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T* obj)
这是一个函数模板。T,MReq和MRes是模板的模板类型参数。
(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T* obj)
这是函数模板的参数列表
bool(T::*srv_func)(MReq &, MRes &)
这是函数模板的第二个参数。
参数名称为 ,参数srv_func类型为bool(T::*)(MReq &, MRes &)。该类型是指向T返回bool并具有类型参数的类类型的非静态成员函数的指针MReq &, MRes &。