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为每个文件夹创建包的方式?我的理解是名称空间通常不像这样使用,嵌套深度和文件夹相关.
你可能想看看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
更容易的帮助下安装标头.
(当然,实际的文件名看起来并不像上面所说的那么愚蠢.)
我一直很喜欢每个文件夹的命名空间.主要是因为当我必须维护别人的代码时,命名空间可以帮助我找到最初定义类的位置.
命名良好的头文件也可以帮助解决这个问题.我也不会建议超过2-3个命名空间,因为它只是变得令人讨厌.你会发现自己使用"using namespace blah;" 我总是发现很多C++代码的红旗.并且您不能在头文件中使用"using namespace"而不会发生严重问题.
尽管在C++中,它都是完全可选的.
归档时间: |
|
查看次数: |
7592 次 |
最近记录: |