From d11c236fab8591369aa982ccc9716fe249c1f195 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Thu, 12 Jan 2023 20:11:20 +0100 Subject: [PATCH] SkillProviderComponentPlugin: addSkill with template param --- .../skills/provider/SkillProviderComponentPlugin.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h index c018ecd9a..d6d8a49a9 100644 --- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h +++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h @@ -4,6 +4,7 @@ #include <queue> #include <thread> #include <functional> +#include <type_traits> #include <ArmarXCore/core/ComponentPlugin.h> #include <ArmarXCore/core/ManagedIceObject.h> @@ -66,6 +67,18 @@ namespace armarx void addSkill(const skills::LambdaSkill::FunT&, const skills::SkillDescription&); void addSkill(std::unique_ptr<skills::Skill>&&); + template<typename T> + T* addSkill() + { + static_assert(std::is_base_of<skills::Skill, T>::value, "T must be derived from skills::Skill!"); + static_assert(std::is_default_constructible<T>::value, "T must be default constructible!"); + + auto skill = std::make_unique<T>(); + auto* skillPtr = skill.get(); + addSkill(std::move(skill)); + return static_cast<T*>(skillPtr); + } + private: armarx::plugins::SkillProviderComponentPlugin* plugin = nullptr; -- GitLab