15 #ifndef RCLCPP__TYPE_ADAPTER_HPP_
16 #define RCLCPP__TYPE_ADAPTER_HPP_
18 #include <type_traits>
98 template<
typename CustomType,
typename ROSMessageType =
void,
class Enable =
void>
101 using is_specialized = std::false_type;
102 using custom_type = CustomType;
105 using ros_message_type = CustomType;
113 template<
typename ... Ts>
118 struct TypeAdapter<T, void, std::enable_if_t<is_type_adapter<T>::value>>: T {};
123 template<
typename CustomType,
typename ROSMessageType>
128 type_adapter::is_specialized::value,
129 "No type adapter for this custom type/ros message type pair");
132 template<
typename,
typename =
void>
136 decltype(T::operator new(std::size_t()))
137 >>: std::true_type {};
139 template<
typename,
typename =
void>
143 std::void_t<decltype( T::operator new(std::size_t(), std::align_val_t()) )>>
153 template<
typename CustomType>
156 template<
typename ROSMessageType>
157 using as = typename ::rclcpp::detail::assert_type_pair_is_specialized_type_adapter<
180 template<
typename CustomType>
183 using is_specialized = std::false_type;
195 struct TypeAdapter<T, void, std::enable_if_t<ImplicitTypeAdapter<T>::is_specialized::value>>
208 #define RCLCPP_USING_CUSTOM_TYPE_AS_ROS_MESSAGE_TYPE(CustomType, ROSMessageType) \
210 struct rclcpp::ImplicitTypeAdapter<CustomType> \
211 : public rclcpp::TypeAdapter<CustomType, ROSMessageType> \
214 is_specialized::value, \
215 "Cannot use custom type as ros type when there is no TypeAdapter for that pair"); \
Versions of rosidl_typesupport_cpp::get_message_type_support_handle that handle adapted types.
Implicit type adapter used as a short hand way to create something with just the custom type.
Template structure used to adapt custom, user-defined types to ROS types.
Template metafunction that can make the type being adapted explicit.
Helper template to determine if a type is a TypeAdapter, false specialization.