我正在尝试包装来自 ros2 message_filters 同步器 的注册回调函数并遇到一些问题。 这个想法是有一个纯虚拟接口和 2 个派生类,两者都有一个名为 registerCallback 的函数;
void register_callback(const std::function<void(ConstSharedMessageT, ConstSharedMessageT)>& callback) {
// store the callback for future use
callback_ = callback;//std::function<void(ConstSharedMessageT, ConstSharedMessageT)>(callback);
// register the callback with the *real* synchronizer
synchronizer_->registerCallback([&callback]( ConstSharedMessageT m1, ConstSharedMessageT m2) {
callback(m1, m2);
});
}
以上是理想的函数签名,然而,我能够传递回调的唯一方法是使用
template<typename C>
void register_callback(const C& callback)
这个问题是 Synchronizer::registerCallback 接受一个模板化变量,这是虚函数不允许的。将它传递给 std::bind 以外的任何东西似乎都会引起问题。
任何关于我可以实现此目标的替代方法的帮助或建议将不胜感激