DefaultPolicy - GerdHirsch/Cpp-VisitorFrameworkCyclicAcyclic GitHub Wiki

If you've choosen BaseKind::Default, the DefaultPolicy is used to implement the default methods for visit(..). There are some DefaultPolicies defined in DefaultPolicy.h

namespace VisitorFramework{
struct EmptyLoggingPolicy{
    template<class Visitable, class Visitor>
    static void logNotAccepted(Visitable const& visitable, Visitor const& visitor){/*empty*/}

    //is used in default visit(..) of a Visitor
    template<class Visitable, class Visitor>
    static void logNotVisited(Visitable const& visitable, Visitor const& visitor){}

    template<class Visitable, class Visitor>
    static void logAccepted(Visitable const& visitable, Visitor const& visitor){}
    template<class Visitable, class Visitor>
    static void logInvalidVisitable(Visitable const& visitable, Visitor const& visitor){}
};
struct StdOutLoggingPolicy{ /* method signatures as above */ };
}

logAccepted is called from Visitable::accept,

logNotAccepted from an Acyclic::Visitable::accept, if the Visitor don't implement the type specific VisitorInterface.

logNotVisited is called from the default Visitor::visit method, if a visitor don't implement a visit method with the matching signature.

logInvalidVisitable is called from accept of an Adapter with a StoragePolicy Weakpointer, if the Weakpointer is expired.

You can define your own DefaultPolicy and delegate the function calls to Element specific Functions, choosen at compile-time, cause the concrete type is known inside of the function.