From 3ab1888aa33a05419f53bf111d9001b57c60a593 Mon Sep 17 00:00:00 2001 From: Christoph Pohl <christoph.pohl@kit.edu> Date: Mon, 17 Jul 2023 15:46:51 +0200 Subject: [PATCH] use perfect forwarding to add skills with non-default constructors --- .../skills/provider/SkillProviderComponentPlugin.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h index 6b74dd1e2..ab6c8c466 100644 --- a/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h +++ b/source/RobotAPI/libraries/skills/provider/SkillProviderComponentPlugin.h @@ -46,16 +46,14 @@ namespace armarx::plugins void addSkill(const skills::LambdaSkill::FunT&, const skills::SkillDescription&); void addSkill(std::unique_ptr<skills::Skill>&&); - template <typename T> + template <typename T, typename... Args> T* - addSkill() + addSkill(Args&&... args) { 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 skill = std::make_unique<T>(std::forward<Args>(args)...); auto* skillPtr = skill.get(); addSkill(std::move(skill)); return static_cast<T*>(skillPtr); @@ -111,11 +109,11 @@ namespace armarx void addSkill(const skills::LambdaSkill::FunT&, const skills::SkillDescription&); void addSkill(std::unique_ptr<skills::Skill>&&); - template <typename T> + template <typename T, typename... Args> T* - addSkill() + addSkill(Args&&... args) { - return plugin->addSkill<T>(); + return plugin->addSkill<T>(std::forward<Args>(args)...); } private: -- GitLab