C++ 是我学习的第一门语言,因此将源代码分成 .h 和 .cpp 文件似乎是显而易见的 - 但在学习了 C# 和 Java 之后,它们现在对我来说显得非常笨拙。它们可能在 60 年代很有用,甚至在 80 年代仍然有用,但在现代工具时代,例如带有部分折叠的 IDE 和文档生成器,它们似乎已经过时了。
无论如何,我的问题是:是否有一种工具可以使这两种文件的存在对程序员透明?比如让coder把一个方法的定义写在头文件里,实际上是保存在.cpp文件里?
(我知道可以尝试仅在头文件中编写 C++ 程序,但据我所知,这不是最佳实践,它会使程序构建时间更长,并且两个类几乎不可能相互引用。)
最佳答案
我在问题、评论和对其他答案的评论中看到的讨论似乎集中在组件的文本表示上。从纯文本的角度来看,完全删除标题是有意义的。
另一方面,头文件和 cpp 文件的分离还有第二个层次,即将接口(interface)与实现分开,并在这样做时从接口(interface)中删除实现细节。
这以不同的方式发生,在最简单的层面上,如何实现特定的功能与组件的用户无关[*]。在许多情况下,您可以在 .cpp 文件中包含更多类型和函数,这些类型和函数仅用作实现细节。此外,如果您决定直接或依赖另一个库来实现特定功能,则属于实现细节,不应泄露给您的用户。
在自动管理文件分离的工具中实现这种分离可能容易也可能不容易,而且那些喜欢使用仅 header 库的人无法做到。
有些人声称没有必要转到定义,并希望看到完整的代码,我看到的是决定组件的哪些部分的灵 active 是用户不应该知道的细节。在许多 IDE 中(甚至在 vim 中)都有一个单一的击键组合,可以让你从一个到另一个。在 IDE 中,您可以重构函数的签名,并让 IDE 将更改应用于 header 和实现(有时甚至应用于用途)...
如果您要让一个工具提供 header 和实现的统一 View ,那么让该工具了解您正在编写的代码的哪些部分是接口(interface)或实现的一部分可能会更难,以及该工具可能做出的决定可能会对生成的程序产生影响。
单独的编译模型有缺点但也有优点,我觉得这里进行的讨论只是触及更深层次设计决策的表面。
[*] 似乎有不少人认为每个类都应该有自己的头文件和 .cpp 文件,我不同意,每个头文件代表一个组件,可能是单个类,也可能是多个类并且免费函数文件中的代码分离是设计的一部分,在单个组件中,您可能有一个或多个公共(public)类型,可能没有或有多个内部类型。
关于c++ - 一种将 C++ 代码划分为 .h 和 .cpp 文件对程序员透明的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045585/