我实施了访客模式,似乎工作正常,但我不知道如何在开始和结束时做一些家务工作。
无法保证何时会调用各种重载的visit()方法,因此我无法判断谁是第一个,谁是最后一个。
基本上我使用访问者来保存/加载磁盘设置。问题是(在加载时)我需要在执行任何其他加载步骤之前清除一些东西。我确实放入了一个静态变量和方法来初始化事物并做这个加载,这应该确保在一开始只发生一次事情 - 但是一个人可以多次加载东西。因此,在阅读结束时,我想重置静态变量(这样他们就可以再次读入,而旧的垃圾仍然存在)。我不能简单地将重置放入析构函数(或析构函数调用的方法),因为为每组设置创建/销毁了具体的访问者对象n次。
我想我需要用另一种模式来制作它,但我没有看到如何。
答案 0 :(得分:1)
跟进我上面的评论。
你可以有一个班级
class VisitorState {
public:
VisitorState() {
// stuff to be done on loading
}
~VisitorState() {
// stuff to be done when done.
}
private:
// state info you might want to keep around
};
然后修改您的访问者界面以获得包含VisitorState
的方法someReturn visit(VisitorState &state,....)
当请求加载文件并保持与正在访问的文件关联时,必须分配VisitorState(new' ed)当处理(删除' d)时必须取消分配文件结束。