15#include <unordered_map>
25using std::unordered_map;
26using std::runtime_error;
33 using Creator = function<unique_ptr<T>()>;
43 creators[name] = move(creator);
46 unique_ptr<T>
create(
const string& name)
const
48 auto it = creators.find(name);
50 if (it == creators.end())
51 throw runtime_error(
"Component not found: " + name);
61 for (
const auto& pair : creators)
62 names.push_back(pair.first);
68 unordered_map<string, Creator> creators;
71#define REGISTER(BASE, CLASS, NAME) \
73 const bool CLASS##_registered = []() { \
74 Registry<BASE>::instance().register_component(NAME, []() { \
75 return make_unique<CLASS>(); \
function< unique_ptr< T >()> Creator
Definition registry.h:33
void register_component(const string &name, Creator creator)
Definition registry.h:41
unique_ptr< T > create(const string &name) const
Definition registry.h:46
vector< string > registered_names() const
Definition registry.h:57
static Registry & instance()
Definition registry.h:35
Definition adaptive_moment_estimation.h:19