【发布时间】:2019-10-22 05:22:15
【问题描述】:
所以我第一次玩访问者模式,想知道为什么我必须为每个派生类编写多次接受函数。
class object
{
public:
virtual void accept(visitor *v) { v->visit(this); }
// ....
};
class derived : public object
{
public:
void accept(visitor *v) override { v->visit(this); } // redundancy in my eyes!!
// ...
};
我真的必须为每个可访问的对象定义接受函数吗?有没有办法只在基类中编写一次并让 this 引用特定的派生类指针而无需强制转换?
【问题讨论】:
-
如果派生类的行为方式与基类完全相同,那么它是多余的,你可以去掉它。如果他们不这样做,那么这不是多余的。如果它们不同,请不要忘记
virtual关键字。 -
@user4581301 问题是 this 必须是 derved* 而不是 object* 类型。
-
访问者模式应该适用于任何类型的组合。为什么仅仅因为您使用派生类就期望它的工作方式有所不同?
标签: c++ design-patterns visitor-pattern