#pragma once #include #include namespace RNR { class InstanceFactory { public: typedef std::function InstanceBuilder; InstanceFactory(); bool registerInstance(std::string key, InstanceBuilder builder); Instance* build(std::string key); static InstanceFactory* singleton() { return m_singleton; }; // default builder template static Instance* instanceBuilder() { return new Derived(); } private: static InstanceFactory* m_singleton; std::map m_builders; }; }