Jur*_*aho 7 c++ const-correctness visitor-pattern
我有一个类应该为每个成员变量调用一个访问者方法.像这样的东西:
class A{
int a, b, c;
public:
void accept(Visitor &visitor){
visitor.visit(a);
visitor.visit(b);
visitor.visit(c);
}
};
Run Code Online (Sandbox Code Playgroud)
如何void accept() const在没有代码重复的情况下使用相同的代码获取方法?
重复的显而易见的解决方案是添加一个方法:
void accept(Visitor &visitor) const {
visitor.visit(a);
visitor.visit(b);
visitor.visit(c);
}
Run Code Online (Sandbox Code Playgroud)
该方法具有我想要的含义,但我想避免代码重复.拥有这两种方法的原因是能够通过"阅读"访问者读取变量并accept很好地使用该方法const.然后非const accept将可用于"写入/更新"访问者.
zda*_*dan 13
您可以创建一个类静态模板辅助函数,该函数将根据this您提供给它的指针类型推导出constness .像这样:
class A{
int a, b, c;
public:
void accept(Visitor &visitor){
acceptImpl(*this, visitor);
}
void accept(Visitor &visitor) const{
acceptImpl(*this, visitor);
}
private:
template<typename t_A>
static void acceptImpl(t_A& aObj, Visitor &visitor)
{
visitor.visit(aObj.a);
visitor.visit(aObj.b);
visitor.visit(aObj.c);
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |