向前宣布一切

时间:2012-10-04 13:51:32

标签: c++ coding-style forward-declaration

事实:前向声明(类类型)优先于包含。

向前声明标题中的所有内容并包含该标题是否存在缺点? (我猜测编译时间不应该增加很多)

在大型代码库中,前向声明可能占用大量的屏幕空间,用一个包含替换它们会很酷 - 但是,有一个前向声明是没有意义的带有前向声明的每个标题的标题。

有没有人这样做或之前见过这个?

3 个答案:

答案 0 :(得分:2)

我认为,如果没有走极端,转发包含几乎没有任何缺点。

我个人不关心屏幕空间。它确实比构建时间乘以2到5到10.我们曾经有超过2小时的构建时间....一些额外的前向包括可能已经消除了相同的文件被击中数千次。

无论如何,你不能总是使用前瞻声明。如果你要对某些东西进行子类化,那么你必须拥有类定义,这可能意味着包含。没关系。

要删除依赖项,您可以做的一件事就是在头文件中取消内联代码。确保将接口向上推,然后降低实现(请参阅Sutter和Alexandrescu的C ++编码标准)。如果可能,意味着您的公共API更像是抽象接口。如果你能做到这一点,那么你可以减少包含或转发声明所需的金额。

哦,也不要将数百个函数和类放在一个头文件中,因此它的长度为8000行。没有人可以阅读/理解这些文件。

答案 1 :(得分:1)

我通常在我的项目中这样做。但我在modules中分割了前向声明。例如:guicore等。这样可以在重新编译之间实现良好的平衡,因为在头文件中使用包含和在手动编写前向声明之间

答案 2 :(得分:1)

使用前向声明而不是包含的一个主要好处是,无论何时更改头文件,都不需要重新编译任何数量的源文件,因为该头文件只会包含在实际需要的地方。< / p>

您的方法可以降低此优势,在某些情况下甚至会使情况变得更糟:每次在某处添加或删除类时,您都需要更改包含前向声明的全局头文件。然后,您需要重新编译代码库中的每个源文件,包括那些不使用添加的类的文件。

尽管如此,由于课程可能不会经常添加,所以这可能是一个不太重要的权衡。