10 #ifndef hifi_Shared_Factory_h
11 #define hifi_Shared_Factory_h
19 template <
typename T,
typename Key>
22 using Pointer = std::shared_ptr<T>;
23 using Builder = std::function<Pointer()>;
24 using BuilderMap = std::map<Key, Builder>;
26 void registerBuilder(
const Key name, Builder builder) {
28 _builders[name] = builder;
31 Pointer create(
const Key name)
const {
32 const auto& entryIt = _builders.find(name);
33 if (entryIt != _builders.end()) {
34 return (*entryIt).second();
39 template <
typename Impl>
42 Registrar(
const Key name, SimpleFactory& factory) {
43 factory.registerBuilder(name, [] {
return std::make_shared<Impl>(); });