15#include <unordered_map>
28 using Creator = function<unique_ptr<T>()>;
38 creators[name] = move(creator);
41 [[nodiscard]] unique_ptr<T>
create(
const string& name)
const
43 auto it = creators.find(name);
45 if (it == creators.end())
46 throw runtime_error(format(
"Component not found: {}", name));
56 for (
const auto& pair : creators)
57 names.push_back(pair.first);
63 unordered_map<string, Creator> creators;
66#define REGISTER(BASE, CLASS, NAME) \
68 const bool CLASS##_registered = []() { \
69 Registry<BASE>::instance().register_component(NAME, []() { \
70 return make_unique<CLASS>(); \
function< unique_ptr< T >()> Creator
Definition registry.h:28
void register_component(const string &name, Creator creator)
Definition registry.h:36
unique_ptr< T > create(const string &name) const
Definition registry.h:41
vector< string > registered_names() const
Definition registry.h:52
static Registry & instance()
Definition registry.h:30
Definition adaptive_moment_estimation.h:14