Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现访问者模式,同时允许不同的函数返回类型_C++_Design Patterns_Visitor - Fatal编程技术网

C++ 实现访问者模式,同时允许不同的函数返回类型

C++ 实现访问者模式,同时允许不同的函数返回类型,c++,design-patterns,visitor,C++,Design Patterns,Visitor,我试图为一个对象结构实现访问者模式,该对象结构具有不同返回类型(string、signed int、unsigned int等)的方法 现在,在对象层次结构中,我添加了一个带有以下签名的Accept方法(使用C++): 我无法理解如何使用相同的接口(使用void返回类型),同时允许我的具体方法具有不同的返回类型 类型层次结构中的Accept方法只是一个分派器,没有返回类型。如果您希望访问产生价值,最简单的方法是将其添加为访问者状态的一部分: struct times2 : visitor {

我试图为一个对象结构实现访问者模式,该对象结构具有不同返回类型(string、signed int、unsigned int等)的方法

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


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

类型层次结构中的
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;
struct times2:访问者{
双重价值;
times2():value(){}
void运算符()(int x){value=x*2;}
void运算符()(双x){value=x*2;}
};
对象o;
时间2伏;
o、 接受(v);

你能不能对你想做的事情提供一个更好的解释。不同的退货类型是什么意思?在访问者模式中,具有正确实现的函数不是
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;