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)

这是函数模板。 TMReqMRes为模板的模板类型参数。

(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 &.

类型的参数