我在问题、评论和对另一个答案的评论中看到的讨论似乎集中在组件的文本表示上。从纯文本的角度来看,完全删除标题是有意义的。
另一方面,头文件和 cpp 文件的分离还有第二个层次,即将接口与实现分离,并在这样做时从接口中删除实现细节。
这以不同的方式发生,在最简单的层面上,您实现特定功能的方式与组件的用户无关[*]。在许多情况下,您可以在 .cpp 文件中拥有更多类型和函数,这些类型和函数仅用作实现细节。此外,如果您决定直接或通过依赖另一个库来实现特定功能,这是实现的细节,不应泄露给您的用户。
在自动管理文件分离的工具中实现这种分离可能会也可能不会容易,并且不能由那些喜欢使用仅标头库的人来完成。
你们中的一些人声称不必去定义没有意义,并且希望完全查看代码,我看到的是可以灵活地决定组件的哪些部分是用户不应该知道的细节。在许多 IDE(甚至在 vim 中)中,只有一个按键组合可以将您从一个键带到另一个。在 IDE 中,您可以重构函数的签名并让 IDE 将更改应用到标头和实现(有时甚至应用到使用)...
如果您要让一个工具提供标头和实现的统一视图,那么让该工具了解您正在编写的代码的哪些部分是接口或实现的一部分以及决策可能会困难得多该工具可能会对生成的程序产生影响。
单独编译模型有其缺点,但也有优点,我觉得这里进行的讨论只是触及更深层次的设计决策的表面。
[*] 似乎有不少人认为每个类都应该有自己的头文件和 .cpp 文件,我不同意,每个头文件代表一个组件,可能是单个类,也可能是多个类和自由函数的分离文件中的代码是设计的一部分,并且在单个组件中,您可能有一个或多个公共类型以及可能没有或多个内部类型。