访客模式缺乏参数

时间:2010-07-05 23:38:48

标签: visitor double-dispatch

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

如何重新编码树遍历的方法,在树类中自己构建方法,比如说

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&amp;)和visit()方法本身。但是,这并不比在课堂上构建的原始遍历更好。

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

0 个答案:

没有答案