【发布时间】:2021-03-14 08:54:23
【问题描述】:
我最近进入了一个项目,其中禁止使用头部防护,因为它是“糟糕的设计”。自定义类型是前向声明的,并且标头仅包含在 cpp 文件中。
这是我看到的第一个这样做的项目,我发现与它一起工作很不舒服,如果由我决定,我会介绍警卫。
使用它们对我来说一直是一个既定的条件,所以我什至不知道如何反对不使用它们,除了强调它不舒服的事实。该项目显然可以编译,因此在这种情况下它是可行的,但我还有几个问题:
- 是否还有其他情况会使开发变得不可能?
- 这种风格有众所周知的好处吗?
- 是否有已知的开源项目使用这种方法?
- 您将如何说服项目负责人允许使用警卫?
【问题讨论】:
-
它给出了“糟糕的设计”的理由是什么?
-
不,您实际上可以直接键入所有行而无需任何头文件。但这样做没有意义。
-
如果你遇到过头文件 B 和 C 都包含头文件 A,并且 B 和 C 都需要包含在任何东西(例如源文件或其他头文件)中的情况,那么头文件 A 需要包括后卫。通过仔细的设计,可以避免这种情况 - 但通常这样做的人力(包括在某些标题被意外包含多次时修复问题,或者非常严格地限制标题的内容)超过使用 include 的努力警卫。
-
至少,通过这种方法,您不会意外地出现循环包含
-
“禁止使用标头保护,因为它是“糟糕的设计”” 他们有一种非常非正统的 C++ 编写方式,或者在最坏的情况下是无能的。
标签: c++ header-files