Ho bisogno di scrivere un programma che implementa il modello di progettazione del visitatore. Il problema è che la classe visitatore base è una classe template. Ciò significa che BaseVisited :: accept() accetta una classe template come parametro e poiché utilizza 'this' e ho bisogno di 'this' per puntare all'istanza runtime corretta dell'oggetto, deve anche essere virtuale.
Mi piacerebbe sapere se c'è un modo per aggirare questo problema.necessario un membro del modello virtuale workaround
template <typename T>
class BaseVisitor {
public:
BaseVisitor();
T visit(BaseVisited *visited);
virtual ~BaseVisitor();
}
class BaseVisited {
BaseVisited();
template <typename T>
virtual void accept(BaseVisitor<T> *visitor) { visitor->visit(this); }; // problem
virtual ~BaseVisited();
}
Cosa c'è di sbagliato in questo? –
non verrà compilato. http://stackoverflow.com/questions/2354210/template-member-function-virtual – yurib
Il compilatore non accetta i modelli nelle funzioni virtuali. – Puppy