我刚从java转到c ++。 我对组织源代码感到困惑。
在Java中,我们有用于在每个模块之间进行组织的包。
组织c ++源代码有哪些常用方法?
答案 0 :(得分:4)
如果你看一下C或C ++中的大型开源项目,你会发现很多种方法来组织源代码。但是,一些常见方案是在module
内使用component
(或src
)与include
和module
的目录结构。或者,您可以反过来使用src\module
和include\module
。
如果您有测试代码,通常会进入module\test
或test\module
。
较大的C ++项目面临的一个有趣挑战是“在哪里放置组件之间共享的头文件”。有时会有include\public
(或public\include
),有时它们与各自的组件有关。
将“可供他人使用”的组件部分与仅在内部使用的组件分开是非常有用的 - 因为内部的内容可以轻松更改而对其他组件没有影响或影响最小,在组件外部“可见”的东西需要更多关注 - 如果组件作为DLL发布并且更新DLL而不重新编译使用组件的部件中的源[如果您有第三方客户端]会发生什么情况没有你的源代码(或者至少不太可能经常构建它),你不一定要强迫他们每次做出一些改变时重建他们的项目。
对于大型项目,namespaces
用于防止名称冲突。
答案 1 :(得分:0)
部分回应:
您可以先在不同的文件夹中组织文件,例如Java。当你#include一个头文件时,你将输入relative / path / from / src而不是path.of.the.package。
C ++还支持名称空间概念:http://www.cplusplus.com/doc/tutorial/namespaces/
答案 2 :(得分:0)
主要的常见方式是:
在类之外组合#include
和namespace
可以实现Java包目标。
答案 3 :(得分:0)
第一个显而易见的规则:如果您正在开展团队/协作项目,请遵循明确的(组织的书面最佳实践)或隐含(研究它是如何完成的)项目规则。
如果您自己开展项目,那么您可以在C ++中获得很多自由,因为组织的概念不同:
因为你有比java更多的自由我建议将文件夹映射到名称空间和文件到合理的类:
这样客户端可以编写如下内容:
#include "groupA/subgroupB/classC.h"
using namespace groupA;
subgroupB::classC object;