visual studio 2012 - c++最佳实践-我应该何时将我的项目分成.h和.cpp文件
visual studio 2012 - Best practice in C++ - when should I divide my project into .h and .cpp files?
我从一个新项目开始。我知道,把一个项目分成。h和。cpp的想法很好,但是在编写和测试代码时,这对我来说很烦人。
在编写新代码时,将我的项目分成。h和。cpp是一个好的做法吗?
或者是更好地编写整个类在。h,然后分割成。h和。cpp(当我的项目完成或接近完成)?
或者我应该在。cpp文件中编写新的类,然后创建单独的。h文件?
您应该始终考虑分割实际代码及其声明,这不仅是一种良好的实践,而且也是一种严格的规则。除非您正在编写模板,在这种情况下,它们的声明和定义都将放在头文件中(即Boost
的代码,其中大部分都是模板)。但是正如在注释中提到的那样,即使在使用模板时,您仍然可以将定义和声明分开。
建议这样做以避免开发过程中的许多痛苦。不这样做可能会给你带来麻烦。值得注意的是,每次对头文件中的代码进行更改时,或者因为多个包含而使编译器重新编译一大堆东西,这最终会导致您花费数小时的时间。
除了最琐碎的项目,或者一些特殊的头文件库之外,最好将其拆分为单独的.h和.cpp文件。除了小型的私人帮佣班,最好有一个单独的。h &每个类的.cpp文件。例外可能是模板、类和接口,它们只能是头文件。
一旦你养成了习惯,它就不是特别烦人了。事实上,它使管理项目更容易。
.h文件通常用作代码的外部接口,因此在它们中尽可能少地暴露,并在.cpp文件中隐藏实现细节。有时我只把一个函数放在。h文件中,而把一个类完全隐藏在。cpp文件中。
如果你有循环依赖关系或递归数据结构,如果你不拆分你的。h和。cpp文件,你可能会遇到问题。
如果是泛型代码(模板,contexpr,宏…)
这取决于你正在处理的问题和你的目标。一般约定是为每个类使用一对头文件和实现文件。(除非您正在编写模板类,它们必须完全放入头文件中)。
现在,当你只是快速测试一些小的东西时,把所有的代码放在一个cpp
文件中是完全合适的。但只要您的项目满足以下任何条件:
- 项目不仅仅是一个算法/实验
- 其他开发人员会继续开发
- 项目将存活(即它将被开发、使用和维护)一段时间
你一定要遵守约定。
现在我承认,这需要更多的努力,这可能看起来令人生畏-但也有工具来帮助这一点。例如,有Visual Studio的Visual Assist,它可以帮助添加成员定义到相应的cpp
文件,好的编辑器支持用热键在头文件和实现文件之间切换,等等。
还有LZZ,它允许您将所有代码保存在单个文件中,并从中生成h
和cpp
文件,尽管我不建议这样做,除非您已经有很多在大型项目上工作的经验。
- cmake在我的项目中所需的所有静态库都不成功
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 编译器现在遵循C++14标准,我的项目不再编译神秘的SFML错误
- 如何在我的项目中从 CMAKE 中的同一项目获取多个库
- 为什么我的项目没有保存名称中所做的修改
- 如何将我的小程序转换为用于项目的函数?
- 如何在我的 Visual C++ 项目中使用 .a 文件
- 如何自动获取我的项目的路径并删除一些文件
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 我怎样才能简单地将opencv 包含在我的项目中与CMake
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 部署基于 qt 的项目后,我的 sqlite3 文件不会被复制 (android)
- 如何将外部 dll 添加到我的 VS2019 项目?
- 如何在Cmake中正确查找头路径,以便在我的项目中构建Box2D
- 阻止我的项目调用__CxxFrameHandler3(CRT函数)
- 我的项目中某些仅标头文件不能包含使用 CMake 和 Vscode 的"SFML/Graphics.hpp"
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 如何在bazel中同时处理外部依赖项和我的项目