我在回调函数中有以下的代码
ROS
// Do my stuff
东西在里面
retSelf()
:
template <typename T>
const typename T::ConstPtr retSelf(const typename T::ConstPtr self, size_t id)
{
// Do my stuff
return self;
}
template<typename CallbackType, typename ClassType>
void subscribe(void (ClassType::*cb)(typename CallbackType::ConstPtr const),
ClassType *thisPtr)
{
auto id = generateId(...);
auto selfP = &retSelf<CallbackType>;
auto returnSelf = boost::bind(selfP, _1, id);
auto callback = boost::bind(cb, thisPtr, returnSelf);
// Register callback
}
现在,这种方法适用于以下呼叫:
void MyClass::MyCallback(sensor_msgs::Image::ConstPtr img){}
subscribe<sensor_msgs::Image>(&MyClass::MyCallback, this);
void MyClass::AnotherCallback(sensor_msgs::Image::ConstPtr img, int idx){}
subscribe<sensor_msgs::Image>(boost::bind(&MyClass::AnotherCallback, this, _1, 42));
也就是说,我还希望指定一个索引参数,客户机软件知道这个参数,但是模板不知道这个参数,最后我就得到了
AnotherCallback()
和
42
值集和我的代码
返回()
执行。
boost::bind
而不是标准库,因为ROS只适用于第一种绑定。