#ifndef MATADOR_OBJECT_LOADER_HPP #define MATADOR_OBJECT_LOADER_HPP #include #include namespace matador::utils { class identifier; } namespace matador::object { class abstract_object_resolver { public: virtual ~abstract_object_resolver() = default; [[nodiscard]] const std::type_index& type() const { return type_; } protected: explicit abstract_object_resolver(const std::type_index& ti) : type_(ti) {} public: const std::type_index type_; }; template class object_resolver : public abstract_object_resolver { public: object_resolver() : abstract_object_resolver(typeid(Type)) {} virtual std::shared_ptr resolve(const utils::identifier& id) = 0; }; } #endif //MATADOR_OBJECT_LOADER_HPP