转发声明所有内容
Forward declare everything
事实:转发声明(类类型的)比includes更可取。
向前声明页眉中的所有内容并包括该页眉是否有不利影响?(我猜编译时间不会增加很多)
在大型代码库中,前向声明可能会占用大量屏幕空间,用单个include替换它们会很酷——然而,用前向声明为每个标头指定一个前向声明标头是没有意义的。
以前有人做过或见过这种事吗?
我认为在不走极端的情况下,转发include几乎没有任何负面影响。
我个人不会在意屏幕空间。它肯定胜过将构建时间乘以2到5到10。我们过去的构建时间超过2小时。。。。一些额外的前向包含本可以消除同一个文件被点击数千次的情况。
无论如何,您不能总是对所有内容使用正向声明。如果你正在对某个东西进行子类,那么你必须有类定义,这可能意味着包含。没关系。
要删除依赖项,您可以做的一件事是在头文件中取消内联代码。确保向上推接口,向下推实现(请参阅Sutter和Alexandrescu的C++编码标准)。这意味着如果可能的话,您的公共API更喜欢抽象接口。如果你能做到这一点,那么你需要包括或远期申报的金额就可以最小化。
哦,也不要把数百个函数和类放在一个头文件中,所以它有8000行长。没有人能阅读/理解这样的文件。
我通常在项目中这样做。但我在modules
中拆分了前向声明。例如:gui
、core
等等。这在由于在头中使用include而大量重新编译和手动编写前向声明之间提供了良好的平衡
使用前向声明而不是include的主要好处之一是,无论何时更改头文件,都不需要重新编译那么多源文件,因为该头文件只会包含在实际需要的地方。
您的方法可能会减少这种好处,在某些情况下甚至会使情况变得更糟:每次在某个地方添加或删除类时,都需要更改包含正向声明的全局头文件。然后,您需要重新编译代码库中的每个源文件,包括那些不使用添加的类的源文件。
尽管如此,由于类可能不会经常添加,所以这可能是一个不错的折衷方案。
- 如何在 C++ 中转发声明 std::set?
- C++使用默认模板参数键入别名和转发声明
- 如何转发声明枚举?
- 使用函数指针转发声明作为 lamba 声明
- 如何将枚举类转发声明为模板化类的内部类?
- 转发声明在命名空间中不起作用的替代方法
- 如何正确转发声明结构"using XXX"?
- 在类内和类外的定义处执行类转发声明是否有区别
- 为什么转发声明的好友类不能在类中引用?
- 如何访问转发声明类的成员
- 仅在标头开发中转发声明
- 无法转发声明C typedef结构-正在查找其他建议
- boost::hana 转发声明标头的用例是什么?
- 循环包含依赖项/转发声明
- c++ 使用复杂的依赖项获取正确的转发声明
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 完美转发使用结构化绑定声明的变量
- 如何声明接受转发引用并返回引用或副本的函数模板
- MSVC 在转发类模板声明中阻塞
- 在 cpp 文件中声明转发的类定义,干什么