16 #include <type_traits>
22 virtual ~IVisitor() =
default;
23 virtual void visit(
IAlgTool* )
const = 0;
39 template <std::invocable<IAlgTool*> Callable>
40 requires( std::is_invocable_r_v<void, Callable, IAlgTool*> )
41 static void visit(
const std::vector<IAlgTool*>& tools, Callable& callable,
42 const std::regex& reject_filter = s_noFilter ) {
43 class Visitor final :
public IVisitor {
47 Visitor( Callable* f ) : m_func{ f } {}
48 void visit(
IAlgTool* alg_tool )
const override { std::invoke( *m_func, alg_tool ); }
50 recursiveVisit( tools, Visitor{ &callable }, reject_filter );
54 static void recursiveVisit(
const std::vector<IAlgTool*>& tools, IVisitor
const& visitor,
55 const std::regex& reject_filter );
56 static const std::regex s_noFilter;