我有一个类,其中声明和实现在 .cpp 文件中。它有一个名为 的成员函数imageCallback()
,在构造函数中使用,如下所示
namespace viso2_ros {
class MonoOdometer : public rclcpp::Node, public OdometerBase
{
MonoOdometer(const std::string& transport, const rclcpp::NodeOptions& options)
{
camera_sub_ = image_transport::create_subscription(this, "image", &MonoOdometer::imageCallback, transport, 1);
}
protected:
void imageCallback(
const sensor_msgs::msg::Image::ConstSharedPtr& image_msg) {
// implementation of the image callback function
}
}
} // end namespace
对我来说,这看起来不错,但它不起作用。
期待回调的create_camera_subscription
这个签名:
const function<void (const shared_ptr<const sensor_msgs::msg::Image_<allocator<void> > > &)>
但它得到了这个签名
void (viso2_ros::MonoOdometer::*)(const sensor_msgs::msg::Image::ConstSharedPtr &)
这个签名是什么意思?namespace::classname::pointer
? 为什么不是函数?
(回调签名与他们在文档https://github.com/ros-perception/image_common/wiki/ROS2-Migration中使用的完全相同,如果有兴趣)