转发声明所有内容

Forward declare everything

本文关键字:声明 转发      更新时间:2023-10-16

事实:转发声明(类类型的)比includes更可取。

向前声明页眉中的所有内容并包括该页眉是否有不利影响?(我猜编译时间不会增加很多)

在大型代码库中,前向声明可能会占用大量屏幕空间,用单个include替换它们会很酷——然而,用前向声明为每个标头指定一个前向声明标头是没有意义的。

以前有人做过或见过这种事吗?

我认为在不走极端的情况下,转发include几乎没有任何负面影响。

我个人不会在意屏幕空间。它肯定胜过将构建时间乘以2到5到10。我们过去的构建时间超过2小时。。。。一些额外的前向包含本可以消除同一个文件被点击数千次的情况。

无论如何,您不能总是对所有内容使用正向声明。如果你正在对某个东西进行子类,那么你必须有类定义,这可能意味着包含。没关系。

要删除依赖项,您可以做的一件事是在头文件中取消内联代码。确保向上推接口,向下推实现(请参阅Sutter和Alexandrescu的C++编码标准)。这意味着如果可能的话,您的公共API更喜欢抽象接口。如果你能做到这一点,那么你需要包括或远期申报的金额就可以最小化。

哦,也不要把数百个函数和类放在一个头文件中,所以它有8000行长。没有人能阅读/理解这样的文件。

我通常在项目中这样做。但我在modules中拆分了前向声明。例如:guicore等等。这在由于在头中使用include而大量重新编译和手动编写前向声明之间提供了良好的平衡

使用前向声明而不是include的主要好处之一是,无论何时更改头文件,都不需要重新编译那么多源文件,因为该头文件只会包含在实际需要的地方。

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

尽管如此,由于类可能不会经常添加,所以这可能是一个不错的折衷方案。