Chira Engine
A customizable MIT-licensed game engine.
AbstractFactory.h
1 #pragma once
2 
3 #include <functional>
4 #include <string>
5 #include <unordered_map>
6 
7 namespace chira {
8 
9 // check render/material/MaterialFactory.h:L21 for example usage
10 
11 template<typename ReturnType>
13  using factoryFunction = std::function<ReturnType(const std::string&)>;
14 public:
15  AbstractFactory() = delete;
16  static bool registerTypeFactory(const std::string& name, factoryFunction createFunc) {
17  if (AbstractFactory::getFactoryMethods().contains(name))
18  return false;
19  AbstractFactory::getFactoryMethods()[name] = createFunc;
20  return true;
21  }
22  static const factoryFunction& getTypeFactory(const std::string& name) {
23  return AbstractFactory::getFactoryMethods().at(name);
24  }
25 protected:
26  static std::unordered_map<std::string, factoryFunction>& getFactoryMethods() {
27  static std::unordered_map<std::string, factoryFunction> factoryFunctions;
28  return factoryFunctions;
29  }
30 };
31 
32 } // namespace chira