SkillFactory.h
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <type_traits>
6#include <utility>
7
9
13
14namespace armarx::skills
15{
17 {
18 public:
19 using FunctionTypeToCreateSkill = std::function<std::unique_ptr<Skill>()>;
20
23 SkillBlueprint(const SkillBlueprint&) = default;
24
25 virtual ~SkillBlueprint() = default;
26
27 template <class _Skill, class... Args>
28 requires isSkill<_Skill>
29
30 static std::unique_ptr<SkillBlueprint>
31 ForSkill(Args&&... args)
32 {
33 auto _createSkill = [=]()
34 {
35 auto ptr = std::make_unique<_Skill>(args...);
36 return ptr;
37 };
38
39 auto ret = std::make_unique<SkillBlueprint>(std::move(_createSkill));
40 return ret;
41 }
42
43 virtual std::unique_ptr<Skill> createSkill(const skills::ProviderID& pid,
44 MessageTypeT logLevel) const;
45
47
48 protected:
50 };
51
52 template <class T>
53 concept isSkillBlueprint = std::is_base_of<SkillBlueprint, T>::value;
54
55} // namespace armarx::skills
SkillBlueprint(const FunctionTypeToCreateSkill &s)
FunctionTypeToCreateSkill _createSkill
static std::unique_ptr< SkillBlueprint > ForSkill(Args &&... args)
virtual SkillDescription createSkillDescription(const skills::ProviderID &pid) const
SkillBlueprint(const SkillBlueprint &)=default
virtual std::unique_ptr< Skill > createSkill(const skills::ProviderID &pid, MessageTypeT logLevel) const
std::function< std::unique_ptr< Skill >()> FunctionTypeToCreateSkill
virtual ~SkillBlueprint()=default
This file is part of ArmarX.
MessageTypeT
Definition LogSender.h:46