【发布时间】:2013-05-10 11:26:59
【问题描述】:
我们可以包含
因此,如果我的项目使用 50 个自定义类,我不仅必须拥有 50 个包含,而且还必须与它们一起编译/链接 50 个 cpp 文件(并使项目树变得混乱)。
问:是否可以像使用标准库一样使用自定义标头?
换句话说,有没有一种洁净的方式,这样我们就不必在项目中添加所有这些 cpp 文件。我只想包含 ClassSnake.hpp,它又知道在哪里可以找到 ClassSnake.cpp,它链接到 ClassVector.hpp,它知道如何找到 ClassVector.cpp ...所有这些都在自动菊花链中,而无需我显式添加那些 cpp 文件在我的项目树中。
编辑:我不太担心重新编译 cpp 文件。我的问题是必须记住哪个类在内部链接到哪个其他类,这样我就可以在项目树中正确包含所有那些隐藏的 cpp 文件......并使树混乱。
【问题讨论】:
-
基本上:使每个函数
inline或template。这应该清空您的 .cpp 文件,此时您可以删除它们。当然不要对 main 这样做。 -
@dionadar,这不是一个好的解决方案。把所有的实现都放在一个头文件中,只是说“使它成为模板”并不能真正解决任何问题。
-
它实际上会一直重新编译所有代码,因为不再有单独的目标文件。所有模板都将在主文件中生成。
-
@Moo-Juice 为什么不呢?将所有内容都放在标头中的问题是包含在多个编译单元中(并且很少与具有内部链接的元素发生名称冲突)。将所有内容都设为
template或inline可以解决这些问题。甚至全局变量也可以这样处理:创建一个返回静态变量引用的内联函数... -
@MikeSeymour,是的,但这也意味着这些头文件一直在重新编译,并且 cpp 文件不应该一直被重新编译,除非它们的实现变化。它只是将问题转移到每个其他编译单元,确定吗?