【发布时间】:2011-03-09 21:29:34
【问题描述】:
我有一个类应该为每个成员变量调用一个访问者方法。像这样的:
class A{
int a, b, c;
public:
void accept(Visitor &visitor){
visitor.visit(a);
visitor.visit(b);
visitor.visit(c);
}
};
我怎样才能得到void accept() const 方法与相同的代码没有代码重复?
重复的明显解决方案是添加一个方法:
void accept(Visitor &visitor) const {
visitor.visit(a);
visitor.visit(b);
visitor.visit(c);
}
那个方法正是我想要的意思,但我想避免代码重复。使用这两种方法的原因是能够通过“阅读”访问者来读取变量,并且可以很好地使用accept 方法const。然后非常量 accept 可以用于“编写/更新”访问者。
【问题讨论】:
-
代码重复发生在哪里。信息不足。
-
visit的签名是什么?如果是 const,则不需要非 constaccept。如果不是,那么这个accept不能是 const。 -
你不能在当前的
accept方法上加一个const吗?为什么需要一个非常量版本的接受? -
@Beta:
visit()可能为const和非const过载。 -
@Beta:
Visitor::visit可能在const int&与int&参数上重载,后者可能会修改访问的内容。不确定这是否明智,但提问者当前的重复代码允许这样做。
标签: c++ const-correctness visitor-pattern