forward-declaring all 类 in one header 对于一个图书馆有什么(other-than-obvious)缺点吗?

Are there any (other-than-obvious) drawbacks to forward-declaring all classes in one header for a library?

假设有一个大型项目,有很多 classes。在每个单独的 header 中添加和删除前向声明是乏味的,但这是必要的,因为包含每个 header 会显着减慢编译速度。

那么在一个特殊的前向声明列表 header 中保留一个库中所有 classes 的列表并将其包含在每个 class header 文件? 我知道的明显缺点是:

最后一个应该是对每个人 class header 的前向声明需要精心维护的情况的改进。 该系统的一个示例是例如<iosfwd> Standard Library header.

这样的系统还有其他缺点吗?

当 class 为 added/removed/renamed 时,必须修改声明的 collection。修改将导致几乎整个项目被重建,而不仅仅是依赖于更改后的 class 名称的翻译单元(因为所有 headers 并且通过包含,所有翻译单元都包含它 [除了那些不要依赖于任何 class,我希望这种情况很少见])。对于大型项目,这可能意味着增量构建时间从一分钟增加到几小时。这几乎是微不足道的。

一些 class 的

前向声明稳定,仅包含通过依赖于相同(或至少相似)一组前向声明的文件可能会有用。