#ifndef MATADOR_OBJECT_RESOLVER_FACTORY_HPP #define MATADOR_OBJECT_RESOLVER_FACTORY_HPP #include "matador/object/object_resolver.hpp" #include namespace matador::object { class object_resolver_factory { public: virtual ~object_resolver_factory() = default; template std::shared_ptr> resolver() { const auto res = acquire_resolver(std::type_index(typeid(Type))); if (!res) { return std::dynamic_pointer_cast>(res); } return std::dynamic_pointer_cast>(res); } virtual std::shared_ptr acquire_resolver(const std::type_index &type) = 0; virtual void register_resolver(std::shared_ptr &&resolver) = 0; }; } #endif //MATADOR_OBJECT_RESOLVER_FACTORY_HPP