#ifndef MEMGRAPH_UTILS_VISITOR_VISITOR_HPP #define MEMGRAPH_UTILS_VISITOR_VISITOR_HPP namespace detail { template struct VisitorBase { virtual ~VisitorBase() {} virtual void visit(T&) {} virtual void post_visit(T&) {} }; template struct RecursiveVisitorBase; template struct RecursiveVisitorBase : VisitorBase, RecursiveVisitorBase { using VisitorBase::visit; using VisitorBase::post_visit; using RecursiveVisitorBase::visit; using RecursiveVisitorBase::post_visit; }; template struct RecursiveVisitorBase : public VisitorBase { using VisitorBase::visit; using VisitorBase::post_visit; }; } template struct Visitor : public detail::RecursiveVisitorBase { using detail::RecursiveVisitorBase::visit; using detail::RecursiveVisitorBase::post_visit; }; #endif