让有一个类:
class A
{
private:
int x;
...
};
Container<A>
还有一些带有方法的容器Container<A>::accept<VisitorT>(const VisitorT visitor)
假设有一个特定的访问者,您需要在其中设置 A 类的字段。
void concrete_visitor(A& a)
{
a.x = 1;
}
但是字段 x 是私有的。如果把它公之于众,那会不会违反OOP?如果从 Object Thinking 书的角度来看,setter 和 getter 也是违反封装的。
如何在不违反 OOP 原则的情况下正确协调这种行为?同时,不使用朋友,因为访问者可以是一个 lambda,并且可以有很多。
访问者模式允许您为其他类的对象定义操作,而无需更改这些类。