全头文件的C++库其实就是相关功能的定义与实现都包含在同一文件中,该类的调用者只需要include该文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用这种方式将大幅度减少调用 project中的cpp文件数与编译次数,只需“#include <xxx>”就可以使用类库的相应功能,不需要link到.lib/.a/.so/.dll等静/动态库。使用者方便,维护者省事,特别是对于一些轻量级的类库,因此非常适合用来编写公用的开源库。类似的例子有STL和boost中的一些组件以及正则库DEELX等等。 此种方式优点很多,但是编写中有以下几点要注意(以下假设hpp即为全头文件化的C++库的头文件):
class B;
class ...