3

我确定这一定是访问者模式的常见问题,所以我想看看是否有标准解决方案。

你怎么能重新编码一个树遍历,其中方法被内置到树类本身中,比如说

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() 方法本身。但这并不比类中内置的原始遍历更好。

另一个问题是,如果每个内置遍历方法都采用不同的参数,或者一些返回值而另一些没有,或者它们不都返回相同的类型,会发生什么?

4

0 回答 0