我正在尝试为具有不同返回类型(字符串、有符号整数、无符号整数等)的方法的对象结构实现访问者模式。
现在,在对象层次结构中,我添加了一个带有以下签名的 Accept 方法(使用 C++):
void Accept(Visitor *);
我无法弄清楚如何使用相同的接口(带有 void return type ),同时允许我的具体方法具有不同的返回类型。
我正在尝试为具有不同返回类型(字符串、有符号整数、无符号整数等)的方法的对象结构实现访问者模式。
现在,在对象层次结构中,我添加了一个带有以下签名的 Accept 方法(使用 C++):
void Accept(Visitor *);
我无法弄清楚如何使用相同的接口(带有 void return type ),同时允许我的具体方法具有不同的返回类型。
类型层次结构中的Accept
方法只是一个调度程序,没有返回类型。如果您想要的是产生值的访问,最简单的方法是将其添加为访问者状态的一部分:
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;
再说一次,访问者的具体细节会随着你的实现而变化,但想法是你可以将结果存储在访问者中而不是返回它。