我想在.hpp中编写代码而不分离为.h和.cpp
我不想手动编写#include ...
附有我的项目模型(如mvc的一部分)的包含图的图像 我使用this app生成图表(可以在没有MSVS的情况下工作!)。
如何包含图形应该是什么样的?像树一样? 如何不手动编写包括C#或Java?
答案 0 :(得分:11)
不幸的是,您可能使用了错误的语言。将类定义与实现分开时,有些事情在C ++中更容易实现。即使使用前向声明,您仍然可能会遇到循环依赖,只能通过将实现移动到单独的文件中来解决。
如果你想编写惯用的Java,只需用Java编写即可。如果你不想使用C ++语言,你必须在其约束条件下工作。
答案 1 :(得分:1)
假设每个类都有一个.hpp文件,那么,include图类似于类依赖图。 为了可重用性,类依赖关系图应该是非循环的(您可以通过使用接口来“拆分”循环来实现这一点)。 所以,我猜包含图也应该是非循环的。
对于#include子句,我担心你必须手动编写它们。但是,如果你的课程足够小,这应该不是问题(如果你的课程如此庞大,你无法弄清楚你需要什么,你有设计问题)。
答案 2 :(得分:1)
就像一个小注释一样,将类拆分为.cpp
和.h
文件不仅可以解决循环依赖问题,而且可能会大大增加编译时间。
如果您尝试编写仅限标题的代码,即使代码的一小部分发生更改,您最终也可能会完全重建项目。
仅限标题代码只有在设计基于模板的库时才有意义,因为模板应驻留在标题中。例如,请参阅boost template library
。还要提到的是,使用模板库的真实应用程序仍然为其代码提供了.cpp
个文件,而实例化的模板实际上是“used”。
答案 3 :(得分:1)
我强烈建议将实现放入“.cpp”文件和声明或接口到头文件“.hpp”。
在头文件中更改内联函数时,将重新编译包含头文件的所有源文件。在源文件中更改函数时,只需要重新编译源文件。
在创建内联函数之前,使代码正常且健壮地运行。
另一个建议是为源文件制作库(目标文件集合),这些源文件按主题分组或不经常编译(即它们工作且不会更改)。
不要担心文件数量和构建过程的长度。专注于正确,稳健地完成项目并按计划完成。根据需要调整构建过程。如果计划中有很多时间,代码可以正常运行并且运行正常,那么请进行更改。如果更改构建过程可以显着加快开发时间*,则进行更改。