#ifndef OBJECT_PROXY_HPP #define OBJECT_PROXY_HPP #include namespace matador::object { class basic_object_proxy { public: virtual ~basic_object_proxy() = default; virtual void *get() const = 0; }; template class object_proxy : public basic_object_proxy { public: void *get() const override { return static_cast(this)->get(); } Type* operator->() const { return obj_.get(); } private: std::shared_ptr obj_{}; }; } #endif //OBJECT_PROXY_HPP