6

我刚从 java 转到 c++。我对组织源代码有点困惑。

在 Java 中,我们有包来组织每个模块。

组织 c++ 源代码的常用方法有哪些?

4

3 回答 3

5

如果您查看 C 或 C++ 中的大型开源项目,您会发现组织源代码的方式多种多样。然而,一些常见的场景modulecomponent在每个. 或者,您可以反过来使用它,并使用and 。srcincludemodulesrc\moduleinclude\module

如果您有测试代码,通常会进入 amodule\testtest\module.

大型 C++ 项目的一个有趣挑战是“在哪里放置组件之间共享的头文件”。有时有一个include\public(或public\include),有时它们带有各自的组件。

将组件中“可供其他人使用”的部分与仅在内部使用的组件分开可能非常有用 - 因为可以轻松更改内部的某些内容而对其他组件没有影响或影响很小在组件外部“可见”的组件将需要更多注意 - 如果组件作为 DLL 发布并且您更新 DLL 而不重新编译使用该组件的部分中的源代码 [如果您有第三方客户端不这样做'如果您没有源代码(或者至少不太可能定期构建它),您不一定希望每次进行一些更改时都强制他们重新构建他们的项目。

对于大型项目,namespaces用于防止名称冲突。

于 2013-03-04T13:25:58.687 回答
0

部分回应:

您可以首先将文件组织在不同的文件夹中,例如在 Java 中。当你#include 一个头文件时,你将输入 relative/path/from/src 而不是 path.of.the.package。

C++ 还支持命名空间概念:http ://www.cplusplus.com/doc/tutorial/namespaces/

于 2013-03-04T13:14:54.563 回答
0

第一个也是显而易见的规则:如果您正在从事团队/协作项目,请遵循项目的明确(组织的书面最佳实践)或隐含的(研究如何完成)规则。

如果您自己在一个项目中,由于不同的互补组织概念,您在 C++ 中有很多自由:

  • 命名空间,
  • 类,
  • 文件系统文件夹,
  • 源文件

因为你比在 java 中拥有更多的自由,所以我建议将文件夹映射到命名空间,并将文件映射到合理的类:

  • 为每个类使用 .h / .cpp 对,但如果看起来合乎逻辑并且避免有很多小文件,您也可以包含帮助程序类或其他链接类。
  • 将命名空间中的类和相关文件分组到具有命名空间名称的文件夹中。

这样,客户端可以编写如下内容:

#include "groupA/subgroupB/classC.h"
using namespace groupA;
subgroupB::classC object;
于 2013-03-04T13:24:16.207 回答