【问题标题】:Implementing Visitor Pattern while allowing different return types of functions实现访问者模式,同时允许不同的返回类型的函数
【发布时间】:2012-04-15 18:17:47
【问题描述】:

我正在尝试为具有不同返回类型(字符串、有符号整数、无符号整数等)的方法的对象结构实现访问者模式。

现在,在对象层次结构中,我添加了一个带有以下签名的 Accept 方法(使用 C++):

void Accept(Visitor *);

我无法弄清楚如何使用相同的接口(返回类型为 void),同时允许我的具体方法具有不同的返回类型。

【问题讨论】:

  • 您应该更好地解释您想要做什么。 不同的返回类型是什么意思?在访问者模式中,正确实现的函数不是accept,而是访问者内部的实现..

标签: c++ design-patterns visitor-pattern


【解决方案1】:

类型层次结构中的Accept 方法只是一个调度程序,没有返回类型。如果您想要的是 visitation 来产生一个值,最简单的方法是将其添加为访问者状态的一部分:

struct times2 : visitor {
   double value;
   times2() : value() {}
   void operator()( int x ) { value = x * 2; }
   void operator()( double x ) { value = x * 2; }
};

object o;
times2 v;
o.accept( v );
std::cout << "Result is " << v.value << std::endl;

再一次,访问者的具体细节会随着你的实现而变化,但想法是你可以将结果存储在访问者中,而不是返回它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多