我需要编写一个实现访问者设计模式的程序。问题是基本访问者类是一个模板类。这意味着 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();
}