В шаблоне посетителей отсутствуют параметры - PullRequest
3 голосов
/ 06 июля 2010

Я уверен, что это типичная проблема с шаблоном 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 ().Но тогда это не лучше, чем оригинальный обход, встроенный в классы.

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

...