C++中的src /文件夹结构?

eri*_*oco 14 c++ namespaces packages

我从Java/AS3-land进入C++,我已经习惯了我的类的包兼文件夹结构.我喜欢它.

我理解c ++中命名空间的基础知识,我很高兴将它留在基础知识中.但是,随着我的项目变得越来越复杂,我想保持我的文件夹结构有条不紊地保持在我脑海中.即类似于Java/AS3的东西.

1)有没有理由没有像下面这样的文件夹结构:

src/
 model/
 view/
 controller/
Run Code Online (Sandbox Code Playgroud)

可能与子文件夹?(这只是一个MVC示例,根据项目的需要,文件夹结构可以是任何东西.)如果src /文件夹中包含大量的头文件和源文件,这似乎是不守规矩的.

2)如果1)的答案可能是"继续做你想要的",那么为每个文件夹创建命名空间是不明智/不必要的,类似于Java/AS3为每个文件夹创建包的方式?我的理解是名称空间通常不像这样使用,嵌套深度和文件夹相关.

den*_*ane 7

你可能想看看John Lakos Large-Scale C++ Software Design.基本上,你可以这样做,但你的包应该(如在Java中)具有非循环依赖图.此外,每个包都可以记录哪些标题是导出的,哪些不是,可能是这样的:

src/
 |- package1/
     |- exported_symbols_1.hh
     |- exported_symbols_2.hh
     |- src/
         |- impl_1.hh
         |- impl_1.cc
 |- package2/
     |- sub_package_2_1/
         |-  exported.hh
         |-  src/
                 ...
      |- src/
            ...
Run Code Online (Sandbox Code Playgroud)

每个包只允许#include另一个包的顶级头,而不是src/目录中的包.

此外,当您想Autotools在大型项目中使用并打算分发标题时,调用顶级目录而不是src/通过该PACKAGE_TARNAME项目调用可能是明智的.这使得在Autotools更容易的帮助下安装标头.

(当然,实际的文件名看起来并不像上面所说的那么愚蠢.)

  • 上面推荐的这本书从15年前处理最坏情况编译器/ STL的需求中得到了很多建议,而对于C++新手的恕我直言的读者最好避免它,直到他们知道要使用什么和忽略什么. (3认同)

Jon*_*erg 7

我一直很喜欢每个文件夹的命名空间.主要是因为当我必须维护别人的代码时,命名空间可以帮助我找到最初定义类的位置.

命名良好的头文件也可以帮助解决这个问题.我也不会建议超过2-3个命名空间,因为它只是变得令人讨厌.你会发现自己使用"using namespace blah;" 我总是发现很多C++代码的红旗.并且您不能在头文件中使用"using namespace"而不会发生严重问题.

尽管在C++中,它都是完全可选的.