#ifndef DISCRETIZATION_H #define DISCRETIZATION_H #include #include #include #include #include #include #include #include namespace platform { class Discretization { public: Discretization(Discretization&) = delete; void operator=(const Discretization&) = delete; // Idea from: https://www.codeproject.com/Articles/567242/AplusC-2b-2bplusObjectplusFactory static Discretization* instance(); std::shared_ptr create(const std::string& name); void registerFactoryFunction(const std::string& name, function classFactoryFunction); std::vector getNames(); std::string toString(); private: map> functionRegistry; static Discretization* factory; //singleton Discretization() {}; }; class RegistrarDiscretization { public: RegistrarDiscretization(const std::string& className, function classFactoryFunction); }; } #endif