Мне нужно написать программу, реализующую шаблон дизайна посетителя. Проблема в том, что базовый класс посетителя является классом шаблона. Это означает, что BaseVisited:: accept() принимает класс шаблона в качестве параметра, и поскольку он использует 'this', и мне нужно 'this', чтобы указать на правильный экземпляр среды выполнения объекта, он также должен быть виртуальным.
Я хотел бы знать, есть ли способ решить эту проблему.
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();
}