};
template<typename T>
-class NodeGatherer: public TraversingVisitor
+class NodeGatherer: private TraversingVisitor
{
private:
std::vector<T *> nodes;
public:
const std::vector<T *> &apply(Stage &s) { visit(s.content); return nodes; }
+private:
using TraversingVisitor::visit;
virtual void visit(T &n) { nodes.push_back(&n); }
};
-class NodeRemover: public TraversingVisitor
+class NodeRemover: private TraversingVisitor
{
private:
Stage *stage;
void apply(Stage &);
+private:
using TraversingVisitor::visit;
virtual void visit(Block &);
virtual void visit(VariableDeclaration &);