在何处定义访问者方法
Where to define visitor methods
我的应用程序实现了访问者模式。我有几个不同的访问者实现相同的界面,我正在尝试确定为每个访问者定义访问方法的最佳位置。
我最初认为最好有一个包含单个访问者的所有定义的.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
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 访问者访问变体并返回不同类型时出错
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 添加无模板实例化的访问者方法
- 在何处定义访问者方法