我确信这一定是访问者模式的常见问题,所以我想看看是否有标准解决方案。
如何重新编码树遍历的方法,在树类中自己构建方法,比如说
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()方法本身。但是,这并不比在课堂上构建的原始遍历更好。
作为一个进一步的问题,如果每个内置的遍历方法采用不同的参数,或者某些返回值而其他方法没有,或者它们都没有返回相同的类型,会发生什么?