Паттерн: Посетитель (Visitor)
Фрагмент: конкретные элементы обхода [C++]
  1. class Element {
  2. public:
  3. virtual ~Element();
  4. virtual void Accept(Visitors) = 0;
  5. protected:
  6. Element();
  7. };
  8.  
  9. class ElementA : public Element {
  10. public:
  11. ElementA();
  12. virtual void Accept(Visitors v) { v.VisitElementA(this); }
  13. };
  14. class ElementB : public Element {
  15. public:
  16. ElementB();
  17. virtual void Accept(Visitors v) { v.VisitElementB(this); }
  18. };