Как адаптировать интерфейс посетителя к интерфейсу итератора?

Мне интересно, есть ли хороший шаблон проектирования или идиома для реализации следующего:

У вас есть существующий класс, который предоставляет только интерфейс посетителя, как показано ниже

 class Visitor {
общественность:
 virtual ~ Visitor () {}
 виртуальное недействительное посещение (Узел * n) = 0;
};

class Tree {
общественность:
 недействительный прием (Посетитель * v);
};

И вы хотите иметь интерфейс, который можно использовать следующим образом, который должен выполнять итерацию по дереву в том же порядке, в котором посетитель будет вызывать его функцию visit .

 for (iterator it (...), ite (...); it! = ite; ++ it) {
 / * узел процесса * /
}

Проблема, по всей видимости, в том, что когда мы просто вызываем visit , мы теряем контроль и не можем временно «вернуться» к телу цикла, чтобы выполнить действие для одного узла. Похоже, это должно происходить регулярно в реальных программах. Есть идеи, как это решить?

9
задан Joachim Sauer 1 April 2011 в 08:01
поделиться