在哪里定义访客方法

时间:2013-09-12 04:26:02

标签: c++ coding-style visitor

我的应用程序实现了访问者模式。我有几个不同的访问者实现相同的界面,我正在尝试确定为每个访问者定义访问方法的最佳位置。

我首先假设最好有一个.cpp文件,其中包含单个访问者的所有定义(每个访问者一个文件)。这种方法导致每个访问者定义文件包含相当多的#include指令,用于访问元素和每个访问方法所需的任何支持函数。

或者,我可以在.cpp文件中为每个访问者定义访问方法,其中包含每个元素的定义,使用此方法所需的include指令已经存在(因此不会重复),但访问者标题除外。访问者标题只包含每个元素的前向声明,因此这种方法的好处是所包含的标题的数量总体上减少了。

elementa.cpp

#include ...
    ElementA specific stuff.
#include ...

void ElementA::accept(Visitor &visitor) {
    visitor.visit(*this);
}

void VisitorA::visit(ElementA &element)
{
    //do cool stuff
}

void VisitorB::visit(ElementA &element)
{
    //do other cool stuff
}

我的问题是,以这种方式在单个文件中定义多个类的方法是否可接受/通用?

1 个答案:

答案 0 :(得分:0)

由于两个原因将访问者函数放在元素类中高度不正常

  • 这意味着每个访问者的代码都是分散的。一般的经验法则是类的代码在一个地方。
  • Visitor的整个目的是解耦元素的算法。没有理由将它们放在同一个.cpp
  • 中来重新接收它们