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