15 #ifndef RCLCPP__GET_MESSAGE_TYPE_SUPPORT_HANDLE_HPP_
16 #define RCLCPP__GET_MESSAGE_TYPE_SUPPORT_HANDLE_HPP_
18 #include <type_traits>
20 #include "rosidl_runtime_cpp/traits.hpp"
21 #include "rosidl_runtime_cpp/message_type_support_decl.hpp"
22 #include "rosidl_typesupport_cpp/message_type_support.hpp"
24 #include "rclcpp/type_adapter.hpp"
37 template<
typename MessageT>
38 constexpr
const rosidl_message_type_support_t & get_message_type_support_handle();
42 template<
typename MessageT>
44 typename std::enable_if_t<
45 rosidl_generator_traits::is_message<MessageT>::value,
46 const rosidl_message_type_support_t &
48 get_message_type_support_handle()
50 auto handle = rosidl_typesupport_cpp::get_message_type_support_handle<MessageT>();
52 throw std::runtime_error(
"Type support handle unexpectedly nullptr");
57 template<
typename AdaptedType>
59 typename std::enable_if_t<
60 !rosidl_generator_traits::is_message<AdaptedType>::value &&
62 const rosidl_message_type_support_t &
64 get_message_type_support_handle()
66 auto handle = rosidl_typesupport_cpp::get_message_type_support_handle<
67 typename TypeAdapter<AdaptedType>::ros_message_type
70 throw std::runtime_error(
"Type support handle unexpectedly nullptr");
82 typename std::enable_if_t<
83 !rosidl_generator_traits::is_message<AdaptedType>::value &&
84 !TypeAdapter<AdaptedType>::is_specialized::value,
85 const rosidl_message_type_support_t &
87 get_message_type_support_handle()
89 throw std::runtime_error(
90 "this specialization of rclcpp::get_message_type_support_handle() "
91 "should never be called");
Versions of rosidl_typesupport_cpp::get_message_type_support_handle that handle adapted types.
Template structure used to adapt custom, user-defined types to ROS types.