实现访客模式,同时允许不同的返回类型的功能

时间:2012-04-15 18:17:48

标签: c++ design-patterns visitor

我正在尝试为具有不同返回类型(string,signed int,unsigned int等)的方法的对象结构实现访问者模式。

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

void Accept(Visitor *);

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

1 个答案:

答案 0 :(得分:14)

类型层次结构中的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;

然后,访问者的具体细节会因您的实施而异,但您的想法是您可以将结果存储在访问者中,而不是返回