It is a bad idea to stuff a lot of #include
into 1 file.
我的情况有点不同 - 我要创建多于一个的中心文件只包含一些 #include
: -
PhysicCommonHub.h: -
#include "PhysicCompound.h" //~ 100 lines
#include "PhysicConstraint.h" //~ 100 lines
#include "PhysicDummy.h" //~ 100 lines
#include "PhysicUtil.h" //~ 100 lines
//In real case, I include around 5 files.
GraphicCommonHub.h: -
#include "GraphicMesh.h" //~ 100 lines
#include "GraphicLightSource.h" //~ 100 lines
#include "GraphicUtil.h" //~ 100 lines
PhysicCompound.h
,则有30%的更改,我还必须包含PhysicConstraint.h
,而PhysicDummy.h
则需要包含30%等等。因此,如果我要加入PhysicCompound.h
,我只会加入PhysicCommonHub.h
。
优势: -
缺点: -
值得吗?是糟糕的主意还是糟糕的做法?是否只是依赖"? 在实际业务中是否有阈值(百分比)? 更具体地说,创建一些集线器文件是否可能是一个好的决定?
如何仅使用前向声明的集线器技术? 更具体地说,有任何情况下这是一个好的决定吗?
PhysicForwardHub.h: -
class PhysicCompound;
class PhysicConstraint;
class PhysicDummy;
class PhysicUtil;
从投票结束开始,我将假设它依赖于#34;即答案是"是"对于这两个问题。 (?)
答案 0 :(得分:1)
我不会将您的方法描述为"不良做法"。我将其形容为可怕的做法。
实际上,您的每个"集线器标头"将与您链接的问题中描述的效果相同。
将这些标题拆分(所以有多个"集线器标题",就像你描述的那样)可能会减轻与包含许多其他标题的单个标题相关的一些影响。但是,这不是您的方法的建议。这是一个单一的全球标题有多糟糕的迹象 - 你的方法简直不那么糟糕,而不是提供一些好的"替代方案。
虽然您已将对可维护性或编译的影响描述为"有点" (即暗示它们并不重要),现实情况是影响非常显着。这些影响在小型项目中可能并不明显,但在大型项目中它们很糟糕。影响包括构建时间增加了几个数量级,并且显着降低了生产力(包括开发人员在等待新代码编译时略显大拇指,因此他们可以对其进行测试)。
仅将此技术用于前向声明不会获得太多收益。总会有代码需要完整的类型定义,而不仅仅是前向声明。并使用您的"集线器标头"实际上,对于前瞻性声明来说,仅仅是楔形的一个薄边 - 毕竟,这是一个小小的步骤说"好吧,我已经为前向声明做了....现在为带有类定义的标题...."。
实际上,尽管需要考虑确定每个编译单元中需要哪些标头,但这种努力通常只是实际实现新代码所花费时间的一小部分。所以你所描述的是虚假经济 - 减少对代码的思考,以一种影响整个项目的各种生产力指标的方式。