缺少参数的访问者模式

发布于 2024-09-08 10:28:36 字数 554 浏览 9 评论 0原文

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

如何重新编码树遍历,其中方法内置于树类本身中,例如

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

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

I'm sure this must be a common problem with the Visitor pattern, so thought I'd see if there is a standard solution.

How can you re-code a tree traversal where the methods are built into the tree classes themselves, say

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

into code that uses a visitor. Two solutions that come to mind are either

class Visitor {
    stack<SomeType> argumentStack;

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

or adding the arguments to the accept(Visitor&) and visit() methods themselves. But then this is no better than the original traversal built into the classes.

As a further problem, what happens if each of the built in traversal methods take different arguments, or some return values and others don't, or they don't all return the same types?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文