8#ifndef SUP_SYSSUP_COMMON_SUBSYSFACTORY_HPP
9#define SUP_SYSSUP_COMMON_SUBSYSFACTORY_HPP
15#include <unordered_map>
22std::string
Demangle(
const char *name);
33 template <
class Base,
class... Args>
class Factory {
36 template <
class ... T>
45 static std::unique_ptr<Base>
Create(
const std::string &s, T&&... args) {
46 const auto& obj_map = Data();
47 auto i = obj_map.find(s);
48 if (i == obj_map.end()) {
51 return obj_map.at(s)(std::forward<T>(args)...);
55 template <
class T>
struct Registrar :
Base {
61 Factory::Data()[name] = [](Args... args) -> std::unique_ptr<Base> {
62 return std::make_unique<T>(std::forward<Args>(args)...);
77 template <
class T>
friend struct Registrar;
79 using FuncType = std::unique_ptr<Base> (*)(Args...);
83 static std::unordered_map<std::string, FuncType> s;
88 template <
class Base,
class... Args>
90 bool Factory<Base, Args...>::Registrar<T>::registered =
Definition subsysFactory.hpp:33
friend Base
Definition subsysFactory.hpp:72
static std::unique_ptr< Base > Create(const std::string &s, T &&... args)
create subsystem object instance
Definition subsysFactory.hpp:45
ActionMgr class source file.
Definition actionMgr.cpp:30
std::string Demangle(const char *name)
Definition subsysFactory.cpp:15
Definition subsysFactory.hpp:55
static bool RegisterT()
Definition subsysFactory.hpp:58
friend T
Definition subsysFactory.hpp:56
static bool registered
Definition subsysFactory.hpp:66