2012-04-15 16 views
15

Ich versuche, das Besuchermuster für eine Objektstruktur zu implementieren, die Methoden mit unterschiedlichen Rückgabetypen hat (Zeichenfolge, vorzeichenbehaftet int, unsigned int usw.).Implementieren des Besuchermusters bei unterschiedlichen Rückgabetypen von Funktionen

nun in der Objekthierarchie Ich habe eine Accept-Methode mit der folgenden Signatur (unter Verwendung von C++) hinzugefügt:

void Accept(Visitor *); 

Ich bin nicht in der Lage, herauszufinden, wie ich die gleiche Schnittstelle (mit Rückgabetyp void verwenden kann), während gleichzeitig meine konkreten Methoden unterschiedliche Rückgabetypen haben.

+0

Sie sollten eine bessere Erklärung geben, was Sie tun möchten. Was meinst du mit * verschiedenen Rückgabetypen *? Im Besuchermuster ist die Funktion mit der richtigen Implementierung nicht das "Akzeptieren", sondern die Implementierungen innerhalb des Besuchers. –

Antwort

14

Die Accept-Methode in der Typhierarchie ist nur ein Dispatcher und hat keinen Rückgabetyp. Wenn das, was wollen Sie die Visitation ist Wert der einfachste Weg, zu produzieren wäre, dass der Zustand des Besuchers als Teil hinzuzufügen:

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; 

Dann wieder, variieren die spezifischen Details des Besuchers mit Ihrem Implementierung, aber die Idee ist, dass Sie das Ergebnis in den Besucher statt return es speichern können.

Verwandte Themen