AutoAPMS
Resilient Robot Mission Management
Loading...
Searching...
No Matches
build_handler_factory_template.hpp
1// Copyright 2024 Robin Müller
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#pragma once
16
17#include "auto_apms_behavior_tree/build_handler/build_handler_factory_interface.hpp"
18
20{
21
22template <typename T>
23class TreeBuildHandlerFactoryTemplate : public TreeBuildHandlerFactoryInterface
24{
25 static_assert(
26 std::is_convertible_v<T *, TreeBuildHandler *>,
27 "Cannot convert T* to TreeBuildHandler*. Did you forget to specify the keyword 'public' when inheriting? --> class "
28 "T : public TreeBuildHandler");
29
30 static_assert(
31 std::is_constructible_v<T, rclcpp::Node::SharedPtr, core::NodeRegistrationLoader::SharedPtr>,
32 "You must implement a constructor with signature TreeBuildHandler(rclcpp::Node::SharedPtr ros_node_ptr, "
33 "NodeLoader::SharedPtr tree_node_loader_ptr).");
34
35public:
36 TreeBuildHandlerFactoryTemplate() = default;
37 virtual ~TreeBuildHandlerFactoryTemplate() = default;
38
39 TreeBuildHandler::SharedPtr makeShared(
40 rclcpp::Node::SharedPtr ros_node_ptr, core::NodeRegistrationLoader::SharedPtr tree_node_loader_ptr) override final
41 {
42 return std::make_shared<T>(ros_node_ptr, tree_node_loader_ptr);
43 }
44
45 TreeBuildHandler::UniquePtr makeUnique(
46 rclcpp::Node::SharedPtr ros_node_ptr, core::NodeRegistrationLoader::SharedPtr tree_node_loader_ptr) override final
47 {
48 return std::make_unique<T>(ros_node_ptr, tree_node_loader_ptr);
49 }
50};
51
52} // namespace auto_apms_behavior_tree
Useful tooling for incorporating behavior trees for task development.
Definition builder.hpp:30