#pragma once #include #include #include #include #include #include #include using json = nlohmann::json; class ModelRegistry { public: using Ctor = std::function(const json& params, float defaultVal)>; static ModelRegistry& instance(); void loadModels(const std::string& jsonPath); IModel* getOrCreate(const std::string& tables1Spec, float defaultVal, const std::string& instanceKey = ""); std::vector findByModelName(const std::string& modelName); void registerMode(const std::string& mode, Ctor ctor); private: ModelRegistry(); std::unique_ptr createModel(const std::string& modelName, float defaultVal); struct ModelDef { std::string mode; json params; }; std::map modelTemplates; std::map> instances; std::map> byModelName; std::map factory; };