在何处定义访问者方法

Where to define visitor methods

本文关键字:方法 访问者 定义 在何处      更新时间:2023-10-16

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

我最初认为最好有一个包含单个访问者的所有定义的.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
}

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

访问者函数放在元素类中是非常不寻常的

,原因有两个
  • 这意味着每个访问者的代码都是分散的。 一般的经验法则是类的代码在一个地方。
  • Visitor 的全部目的是解耦元素的算法。 没有理由将它们放在同一个.cpp