为什么有人会像这样定义一个抽象的访问者类?

时间:2017-10-22 17:23:40

标签: c++

这只是项目中较大遗留代码的最小版本,其中访问者模式定义如下: -

struct AbstractElement;
struct FirstElement;
struct SecondElement;
struct ThirdElement;

struct AbstractVisitor{
   virtual void visit(FirstElement&) = 0;
   virtual void visit(SecondElement&) = 0;
   virtual void visit(ThirdElement&) = 0;
};

struct AbstractElement{
   virtual void accept(AbstractVisitor* v) = 0;
};

struct FirstElement : public AbstractElement{
    void accept(AbstractVisitor* v) { v->visit(*this); }
}

struct SecondElement : public AbstractElement{
    void accept(AbstractVisitor* v) { v->visit(*this); }
};

struct ThirdElement : public AbstractElement{
    void accept(AbstractVisitor* v){ v->visit(*this); }
};

struct Visitor : public AbstractVisitor{
    void visit(FirstElement& p){ process(p); }
    void visit(SecondElement& p){ process(p); }
    void visit(ThirdElement& p){ process(p); }
    virtual void process(AbstractElement& b){/* some processing common to every concrete element */ }
};

我无法理解的代码部分是为什么此代码的编写者将AbstractVisitor类定义为: -

struct AbstractVisitor{
   virtual void visit(FirstElement&) = 0;
   virtual void visit(SecondElement&) = 0;
   virtual void visit(ThirdElement&) = 0;
};

而不是像以下那样定义: -

struct AbstractVisitor{
   virtual void visit(AbstractElement&) = 0;
};

按照作者定义的方式定义类是否有任何好处?

0 个答案:

没有答案