gpt4 book ai didi

c++ - 如何布局我的 C++ 程序? (我应该把 .h 和 .cpp 文件放在哪里?)

转载 作者:可可西里 更新时间:2023-11-01 17:52:51 26 4
gpt4 key购买 nike

目前,我使用 Java 编程并经常使用 Maven。因此,我已经习惯了在过去 4 或 5 年中使用的命名方案和文件夹结构。

由于我最近开始学习 C++,我意识到我不知道将所有文件放在哪里。我应该按命名空间还是按它所在的层级对所有内容进行 segmentation ?例如,我应该在哪里保留一系列专门用于 UI 的文件,而不是用于帮助存储数据的文件?

这种东西有什么标准吗?

显然,这个问题没有明确的答案。我只是在寻找一个好的指南。我不想通过花太多时间担心文件的布局来开始学习 C++。我宁愿有一些好的模型,而只是开始编码。

最佳答案

以下是相当典型的......

third-party library
release
obj
debug
obj
include
src
sublib 1
sublib 2

mylibrary
release
obj
debug
obj
include
src
sublib 1
sublib 2

myapp
release
obj
debug
obj
subapp 1
subapp 2

mylittleapp
release
obj
debug
obj

基本上,子项目的子文件夹对于较大的项目是常见的,但大多数特定项目都有 src、include 等文件夹。每个构建配置的文件夹是常见的,将 obj 文件和其他中间文件保存在子文件夹中是一个好主意。将子项目文件夹放在 obj 文件夹中可能很诱人,但通常这是不必要的 - obj 文件夹不需要很好地组织,所​​以唯一的问题是文件名冲突,最好的解决办法是拥有唯一的源文件名在(至少)每个项目中。

IMO 中的“include”文件夹应该只包含将被其他项目#include 的 header - 内部 header 属于“src”文件夹。

如果足够大,将 UI 内容放在单独的文件夹中并不是一个坏主意。我已经看到 UI 的东西是作为一个单独的静态链接的顶级项目完成的,我在这里的意思是特定于应用程序,而不是(例如)wxWidgets。不过,通常情况下,这种级别的划分是子项目如果它完全值得分开。一般来说,如何划分子项目更多地是应用程序特定 block 的问题,因此这取决于 UI 内容是最好作为单独的 block 处理还是作为与特定任务逻辑混合的单独 block 来处理。

命名空间并不是最常用的语言特性,可能是因为很多人经常使用“using”,所以它们并没有太大区别。主库项目的命名空间是有意义的,但将子文件夹与命名空间 1:1 相关联并不是我见过的。我个人有一个包含我的大部分库代码的 namespace ,其中有几个子 namespace 用于一般很少使用但在少数地方使用很多的东西(例如“按位” namespace )。子命名空间仅限于单个源/ header 对,因此不需要子文件夹。大多数特定于库的选择都是通过包含正确的标题来完成的 - 除了我通常通过主项目顶级标题来包含很多。

基本上,命名空间是避免命名冲突的一种方式。它们不一定与抽象或功能 block 或任何东西相关联。在特定项目中,您最好只确保名称不冲突。与“std”命名空间一样,可以将很多的东西放在一个命名空间中。

不过,正如您所说,这不是一个确定的答案 - 当然存在细微的差异和完全不同的方法。

关于c++ - 如何布局我的 C++ 程序? (我应该把 .h 和 .cpp 文件放在哪里?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com