0

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

起初,我认为最好有一个包含单个访问者的所有定义的单个 .cpp 文件(每个访问者一个文件)。这种方法导致每个访问者定义文件都包含相当多的#include 指令,用于要访问的元素和每个访问方法所需的任何支持功能。

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

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
}

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

4

1 回答 1

0

将访问者函数放在元素类中是非常不寻常的,原因有两个

  • 这意味着每个访问者的代码是分散的。一般的经验法则是一个类的代码在一个地方。
  • 访问者的全部目的是解耦元素的算法。没有理由通过将它们放在同一个 .cpp 中来重新耦合它们
于 2013-09-12T05:52:10.333 回答