1#ifndef FACTORY_HPP_QLKNHPWZ
2#define FACTORY_HPP_QLKNHPWZ
15template<
typename T,
typename... Args>
19 using Result = std::unique_ptr<T>;
20 using Function = std::function<Result(Args...)>;
22 Factory() : m_default(m_functions.end())
31 Result
create(
const std::string& name, Args... args)
const
33 std::unique_ptr<T> obj;
34 auto found = m_functions.find(name);
35 if (found != m_functions.end()) {
36 obj = found->second(std::forward<Args>(args)...);
47 std::unique_ptr<T> obj;
48 if (m_default != m_functions.end()) {
49 obj = m_default->second(std::forward<Args>(args)...);
60 bool add(
const std::string& name, Function f)
62 return m_functions.emplace(name, std::move(f)).second;
72 m_default = m_functions.find(name);
73 return m_default != m_functions.end();
77 using map_type = std::map<std::string, Function>;
79 typename map_type::const_iterator m_default;
Result create(const std::string &name, Args... args) const
bool configure_default(const std::string &name)
bool add(const std::string &name, Function f)
Result create(Args... args) const