我正在开发一个 C++ 项目,在该项目中,我将每个类都实现为单独的 .h 文件和 .cpp 文件。我发现这不值得麻烦。- 我在两个文件之间来回编辑 - 它给我带来了很多意想不到的头痛(必须添加预声明,显式导出模板类) - 我没有看到直接的好处,我的代码库肯定会保持相对较小(比如 < 10,000 行代码)并且编译时间并不长。
我的问题有两个
a) 将实现和原型分开是否有我可能错过的好处?
b) 如果没有,是否有任何免费工具或 ide 能够将 cpp 文件合并回头文件?
我正在开发一个 C++ 项目,在该项目中,我将每个类都实现为单独的 .h 文件和 .cpp 文件。我发现这不值得麻烦。- 我在两个文件之间来回编辑 - 它给我带来了很多意想不到的头痛(必须添加预声明,显式导出模板类) - 我没有看到直接的好处,我的代码库肯定会保持相对较小(比如 < 10,000 行代码)并且编译时间并不长。
我的问题有两个
a) 将实现和原型分开是否有我可能错过的好处?
b) 如果没有,是否有任何免费工具或 ide 能够将 cpp 文件合并回头文件?
不要这样做。对于大多数简单的类,如果您想公开该类以在其他地方使用,您应该始终* 在.h
头文件中包含类的声明,并在文件中包含定义(代码).cpp
。
.h
然后,您可以在要使用该类的任何位置包含该文件(即实例化它)。但是,链接器负责在每个.cpp
单独编译后“链接”代码。
我对你的问题是,“否则你会怎么做?” 我看到许多 n00b 犯的一个错误是#include "foo.c
. 然后发生的事情是,您不仅失去了独立编译,而且在链接时遇到了问题,因为同一个类有多个定义。请记住,当您#include
创建一个文件时,它实际上会在您所说的那个文件的正文中扑通一声。
[*] 这个规则当然有例外:
一个例外是模板类。这些必须全部在头文件中。原因是在使用类型参数实例化类之前不会生成实际代码。然后,编译器本质上是在需要的地方用指定的类型“填充”类的主体。由于直到那时才知道类型,因此无法独立编译并在以后链接起来。