Potrzebuję napisać program realizujący wzór wizyty gościa. Problem polega na tym, że podstawowa klasa odwiedzającego jest klasą szablonów. Oznacza to, że BaseVisited :: accept() przyjmuje klasę szablonu jako parametr i ponieważ używa "this" i potrzebuję "this", aby wskazać prawidłową instancję wykonawczą obiektu, musi również być wirtualna.
Chciałbym wiedzieć, czy istnieje jakiś sposób obejścia tego problemu.Potrzebuję obejścia wirtualnego szablonu uczestnika
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();
}
Co jest nie tak z tym? –
to nie będzie kompilacji. http://stackoverflow.com/questions/2354210/template-member-function-virtual – yurib
Kompilator nie zaakceptuje szablonów w funkcjach wirtualnych. – Puppy