我有一个个人项目,我怀疑它会超过20对header / cpp文件。我想知道让每个头文件和cpp文件包含它需要的其他文件(或使用前向声明)是否更好,或者让每个文件都包含“Includes.hpp”,后者又包括所有标准库,给出每个类的前向声明,然后包括我的所有其他标题。
我可以看到,使用一个大头文件:
这是个好主意吗?
答案 0 :(得分:5)
我会说一般这是一个坏主意,原因如下:
#undef MIN
的人都会知道这种痛苦。我认为虽然有一个实例可以接受,但是如果你的库只提供了一些打算由客户端调用的类/函数,那么其余只是实现所使用的内部类。所以客户可以只包括mylib.h
,这就是他们需要担心的全部内容。如果您想将库编译为静态库,这也可以更容易,因为您可以只分发库和一个标题。
答案 1 :(得分:3)
说实话,我不会这样做。您提到您的项目将只有大约20个cpp文件,但您没有提到这些文件有多大以及它们将包含多么复杂的代码。如果你把所有东西都放在一个大的头文件中,每次你必须重新编译这20个文件,如果这些文件包含很多代码,这将使编译时间显着增加。
当然,如果要包含在大标题中的所有标题库中的标题或标题库都不会修改,那么您可以将它们全部放在预编译的标题中,并让所有cpp文件都包含它。
但是,如果您要修改标题(例如更改类定义,添加typedef等),您应该知道每次修改都需要重新编译所有cpp文件。根据这些文件的大小,每个小编辑(更改函数名称,添加空格,添加注释)可能会延迟您的工作一分钟,这可能需要五秒钟(如果您使用更复杂的库,如Boost.Spirit,那些时间真的很快)。
总而言之,如果您正在处理需要维护的项目,我不会将所有内容都放在一个文件中,即使项目很小现在。
答案 2 :(得分:0)
不是。
使用便利标题确实存在,介意,它们可以用于打包在一起的功能,并且还可以优先选择include
到前向声明头文件,如果您认为标题的客户端90%的时间也需要包含对象的完整定义。
然而,全局标题是糟糕的风格,虽然你的项目现在很小,但它可能会在以后增长。不得不解开这种事情并重新点头,我只能说:没有乐趣......
无论如何还有什么好处?如果项目很小,那么开头的标题很少,所以它很少。