From 8c47f6151bd5c68bd7b2a31e375c114ad8ba087e Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Thu, 5 Nov 2015 14:11:34 -0800 Subject: [PATCH] Pass callbacks as universal references --- rclcpp/include/rclcpp/client.hpp | 5 +++-- rclcpp/include/rclcpp/node.hpp | 8 ++++---- rclcpp/include/rclcpp/node_impl.hpp | 14 +++++++------- rclcpp/include/rclcpp/parameter_client.hpp | 12 ++++++------ 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/rclcpp/include/rclcpp/client.hpp b/rclcpp/include/rclcpp/client.hpp index ba087f4..839c8f8 100644 --- a/rclcpp/include/rclcpp/client.hpp +++ b/rclcpp/include/rclcpp/client.hpp @@ -125,7 +125,7 @@ public: SharedFuture async_send_request( typename ServiceT::Request::SharedPtr request, - CallbackType cb) + CallbackType && cb) { int64_t sequence_number; if (RMW_RET_OK != rmw_send_request(get_client_handle(), request.get(), &sequence_number)) { @@ -137,7 +137,8 @@ public: SharedPromise call_promise = std::make_shared(); SharedFuture f(call_promise->get_future()); - pending_requests_[sequence_number] = std::make_tuple(call_promise, cb, f); + pending_requests_[sequence_number] = + std::make_tuple(call_promise, std::forward(cb), f); return f; } diff --git a/rclcpp/include/rclcpp/node.hpp b/rclcpp/include/rclcpp/node.hpp index b95c6ba..844629c 100644 --- a/rclcpp/include/rclcpp/node.hpp +++ b/rclcpp/include/rclcpp/node.hpp @@ -131,7 +131,7 @@ public: typename rclcpp::subscription::Subscription::SharedPtr create_subscription( const std::string & topic_name, - CallbackT callback, + CallbackT && callback, const rmw_qos_profile_t & qos_profile = rmw_qos_profile_default, rclcpp::callback_group::CallbackGroup::SharedPtr group = nullptr, bool ignore_local_publications = false, @@ -158,7 +158,7 @@ public: create_subscription( const std::string & topic_name, size_t qos_history_depth, - CallbackT callback, + CallbackT && callback, rclcpp::callback_group::CallbackGroup::SharedPtr group = nullptr, bool ignore_local_publications = false, typename rclcpp::message_memory_strategy::MessageMemoryStrategy::SharedPtr @@ -203,11 +203,11 @@ public: rclcpp::callback_group::CallbackGroup::SharedPtr group = nullptr); /* Create and return a Service. */ - template + template typename rclcpp::service::Service::SharedPtr create_service( const std::string & service_name, - FunctorT callback, + CallbackT && callback, rclcpp::callback_group::CallbackGroup::SharedPtr group = nullptr); RCLCPP_PUBLIC diff --git a/rclcpp/include/rclcpp/node_impl.hpp b/rclcpp/include/rclcpp/node_impl.hpp index d4d3042..b59246a 100644 --- a/rclcpp/include/rclcpp/node_impl.hpp +++ b/rclcpp/include/rclcpp/node_impl.hpp @@ -141,7 +141,7 @@ template typename rclcpp::subscription::Subscription::SharedPtr Node::create_subscription( const std::string & topic_name, - CallbackT callback, + CallbackT && callback, const rmw_qos_profile_t & qos_profile, rclcpp::callback_group::CallbackGroup::SharedPtr group, bool ignore_local_publications, @@ -155,7 +155,7 @@ Node::create_subscription( rclcpp::subscription::AnySubscriptionCallback any_subscription_callback(allocator); - any_subscription_callback.set(callback); + any_subscription_callback.set(std::forward(callback)); using rosidl_generator_cpp::get_message_type_support_handle; @@ -251,7 +251,7 @@ typename rclcpp::subscription::Subscription::SharedPtr Node::create_subscription( const std::string & topic_name, size_t qos_history_depth, - CallbackT callback, + CallbackT && callback, rclcpp::callback_group::CallbackGroup::SharedPtr group, bool ignore_local_publications, typename rclcpp::message_memory_strategy::MessageMemoryStrategy::SharedPtr @@ -262,7 +262,7 @@ Node::create_subscription( qos.depth = qos_history_depth; return this->create_subscription( topic_name, - callback, + std::forward(callback), qos, group, ignore_local_publications, @@ -313,11 +313,11 @@ Node::create_client( return cli; } -template +template typename rclcpp::service::Service::SharedPtr Node::create_service( const std::string & service_name, - FunctorT callback, + CallbackT && callback, rclcpp::callback_group::CallbackGroup::SharedPtr group) { using rosidl_generator_cpp::get_service_type_support_handle; @@ -325,7 +325,7 @@ Node::create_service( get_service_type_support_handle(); rclcpp::service::AnyServiceCallback any_service_callback; - any_service_callback.set(callback); + any_service_callback.set(std::forward(callback)); rmw_service_t * service_handle = rmw_create_service( node_handle_.get(), service_type_support_handle, service_name.c_str()); diff --git a/rclcpp/include/rclcpp/parameter_client.hpp b/rclcpp/include/rclcpp/parameter_client.hpp index 3a09139..9f1ef1b 100644 --- a/rclcpp/include/rclcpp/parameter_client.hpp +++ b/rclcpp/include/rclcpp/parameter_client.hpp @@ -91,12 +91,12 @@ public: void(std::shared_future) > callback = nullptr); - template + template typename rclcpp::subscription::Subscription::SharedPtr - on_parameter_event(FunctorT callback) + on_parameter_event(CallbackT && callback) { return node_->create_subscription( - "parameter_events", callback, rmw_qos_profile_parameter_events); + "parameter_events", std::forward(callback), rmw_qos_profile_parameter_events); } private: @@ -149,11 +149,11 @@ public: const std::vector & parameter_prefixes, uint64_t depth); - template + template typename rclcpp::subscription::Subscription::SharedPtr - on_parameter_event(FunctorT callback) + on_parameter_event(CallbackT && callback) { - return async_parameters_client_->on_parameter_event(callback); + return async_parameters_client_->on_parameter_event(std::forward(callback)); } private: