2012-04-15 9 views
15

Estoy tratando de implementar el patrón de visitante para una estructura de objeto que tiene métodos con diferentes tipos de retorno (cadena, int firmado, int sin firmar, etc.).Implementando patrón de visitante mientras permite diferentes tipos de retorno de funciones

Ahora, en la jerarquía de objetos He añadido un método Aceptar con la firma siguiente (usando C++):

void Accept(Visitor *); 

Soy incapaz de averiguar cómo puedo usar la misma interfaz (con tipo de retorno void) al tiempo que permite que mis métodos concretos tengan diferentes tipos de devolución.

+0

Debe proporcionar una mejor explicación de lo que quiere hacer. ¿A qué te refieres con * diferentes tipos de devolución *? En el patrón de visitante, la función con la implementación adecuada no es 'aceptar', sino más bien las implementaciones dentro del visitante. –

Respuesta

14

El método Accept en la jerarquía de tipos es simplemente un despachador y no tiene ningún tipo de devolución. Si lo que quiere es la visitas para producir un valor de la manera más simple sería añadir que como parte del estado del visitante:

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; 

Por otra parte, los detalles específicos del visitante variarán con su implementación, pero la idea es que puede almacenar el resultado en el visitante en lugar de devolver.

Cuestiones relacionadas