bool(T::* ...) 是做什么的?
What does bool(T::* ...) do?
从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
是请求class,MRes
是结果class。 obj
是因为这是回调的 class 成员版本。
谁能解释一下这个语法 bool(T::*...
是什么意思?它只是强制 srv_func
必须是 T
的 class 成员,而不是任何旧函数吗?
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 &)
。该类型是指向 class 类型 T
且 returns bool
的非静态成员函数的指针,并且具有 MReq &, MRes &
.
类型的参数
从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
是请求class,MRes
是结果class。 obj
是因为这是回调的 class 成员版本。
谁能解释一下这个语法 bool(T::*...
是什么意思?它只是强制 srv_func
必须是 T
的 class 成员,而不是任何旧函数吗?
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 &)
。该类型是指向 class 类型 T
且 returns bool
的非静态成员函数的指针,并且具有 MReq &, MRes &
.