Мне интересно, есть ли хороший шаблон проектирования или идиома для реализации следующего:
У вас есть существующий класс, который предоставляет только интерфейс посетителя, как показано ниже
class Visitor { общественность: virtual ~ Visitor () {} виртуальное недействительное посещение (Узел * n) = 0; }; class Tree { общественность: недействительный прием (Посетитель * v); };
И вы хотите иметь интерфейс, который можно использовать следующим образом, который должен выполнять итерацию по дереву в том же порядке, в котором посетитель будет вызывать его функцию
visit
.for (iterator it (...), ite (...); it! = ite; ++ it) { / * узел процесса * / }
Проблема, по всей видимости, в том, что когда мы просто вызываем visit
, мы теряем контроль и не можем временно «вернуться» к телу цикла, чтобы выполнить действие для одного узла. Похоже, это должно происходить регулярно в реальных программах. Есть идеи, как это решить?