我知道标准库使用包含.h的旧C库,包括没有.h的最新库。但是对于自己的课程来说,更好的做法是什么?
我工作的地方总是有一个include文件夹,每个类有两个文件:classname.h和ClassName。 ClassName包含classname.h,classname.h包含真正的类头。要包含一个课程,请使用
#include <ClassName>
这就是Qt的方式,我很确定Qt是他们开始在我公司做的原因。但这有什么好处吗?
我认为缺点非常明显:
你使用这种风格吗?如果是这样,为什么?它的论点是什么?是否有更多反对它的论据?
答案 0 :(得分:3)
首先,我要编写一个术语并将其称为&#34;特定于类的包含文件&#34;或&#34; CSIF&#34; 。这些文件不会以.h
结尾,即使它们像标题一样使用,因此&#34;包含文件&#34;部分。既然我会继续提到这件事,我也可以给它一个首字母缩略词。
Qt有一个&#34;标题&#34;每个定义的Qt class
或struct
没有扩展名的文件,此答案称为CSIF。 CSIF使用普通的头文件直接进入\include
路径,但如果你打开一个文件,它们都会做同样的事情。让我们从QtWidgets
中的包含文件开始,特别是与QStyleOption
相关的文件:
\include
...
QStyleOption
qstyleoption.h
QStyleOptionButton
QStyleOptionComboBox
...
如果您打开其中一个与QStyleOption
相关的CSIF,则所有CSIF都包含一行代码:
#include "qstyleoption.h"
在qstyleoption.h
:
#include "../../src/widgets/styles/qstyleoption.h"
CSIF所做的只是#include
来自源树的正确标题,用于命名的类。它在类的实际定义和之间创建抽象级别。需要使用#include
语句。结果,这段代码:
//In some .cpp file somewhere
#include <QStyleOptionButton>
#include <QStyleOptionComboBox>
包含相同的头文件(当然是由警卫保护),但使用Qt的开发人员并不需要知道这一点。所有开发人员都关心的是他/她是否正在使用课程,并且他/她希望确定该课程是否可用。 我不知道这是不是原来的逻辑,但这就是它的影响。
<强> 1。你用这种风格吗?如果是这样,为什么?
是的,但这只是因为我正在研究的项目模仿Qt库样式,因此Qt开发人员可以在Qt中轻松使用它。否则,[插入大量咒骂]。
<强> 2。它的论点是什么?
我所知道的唯一好的论据就是上面,Qt如何使用它来抽象出类和它们的定义的位置。作为Qt的用户,确保我包含正确的头文件是轻而易举的。如果我使用课程QFoo
,则包含:<QFoo>
。简单。
第3。是否有更多反对它的论据?
正如你在问题中所指出的,有很多反对它的论据。
我确信其他人可以提出更多CSIF让生活变得困难的例子。总之,在做出决定之前,必须权衡其在图书馆中增加的刚性和最终开发者的利益之间的平衡。
至于你的工作场所如何使用它...我耸耸肩。有人复制了Qt风格而不理解为什么,或许?