#ifndef MODELS_H #define MODELS_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../experimental_clfs/XA1DE.h" // #include "../experimental_clfs/AdaBoost.h" #include "../experimental_clfs/DecisionTree.h" namespace platform { class Models { public: Models(Models&) = delete; void operator=(const Models&) = delete; // Idea from: https://www.codeproject.com/Articles/567242/AplusC-2b-2bplusObjectplusFactory static Models* instance(); 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 Models* factory; //singleton Models() {}; }; class Registrar { public: Registrar(const std::string& className, function classFactoryFunction); }; } #endif