В шаблоне посетителей отсутствуют параметры

Я уверен, что это должно быть общая проблема с шаблоном Visitor, поэтому подумал, что я посмотрю, есть ли стандартное решение.

Как вы можете перекодировать обход дерева, когда методы встроены в сами классы дерева, скажем

class Node {
    void Traverse(SomeType& t) { ... }
};

в код, который использует посетитель. На ум приходят два решения:

class Visitor {
    stack<SomeType> argumentStack;

    void Visit() {
        // do work, add new arguments onto stack
        // call accept() on child objects
        // pop stack
    }
};

или добавив аргументы в сами методы accept(Visitor&) и visit(). Но тогда это не лучше, чем оригинальный обход, встроенный в классы.

В качестве дополнительной проблемы, что произойдет, если каждый из встроенных методов обхода принимает разные аргументы, или некоторые возвращаемые значения, а другие нет, или они не все возвращают одинаковые типы?

0 ответов

Другие вопросы по тегам