【发布时间】:2011-05-17 09:01:02
【问题描述】:
这是一个比较笼统的问题,因为我在网上找到的关于如何最好地组织源代码的信息相对较少。
我目前布置代码的方式是在 VS 中编译一个 lib 项目,然后在此之上创建两个控制台应用程序项目,一个用于单元测试,一个用于执行 lib 中的代码。
在主项目中,我有一个名为 src 的文件夹,其中包含我的 src 代码。然后将这个源代码组织到不同的文件夹中,每个文件夹都包含 .h 和 .cpp 文件。文件名与类名匹配。文件夹匹配命名空间,因此每个文件夹都在自己的命名空间中。
我认为这是一种非常明智的方法,直到我发现如果两个 .cpp 文件具有相同的名称(尽管在不同的文件夹和命名空间中),Visual Studio 2010 会在这种方法下出现问题,因为所有 .obj 文件都放在相同的临时目录(Debug 或 Release)。
这让我想知道,维护大量命名空间和子命名空间的目的肯定是让您拥有同名的类和文件。一些 google-ing 提出了单独选择冲突文件并将 .obj 文件放置到不同位置的解决方案,但有些暗示性能更差,这似乎有点奇怪。
所以我只是想知道,这不是一个明智的布局吗?还是人们通常将每个文件夹编译成一个静态库然后链接它们?或者你只是维护不同的文件名?然后,您是否继续将文件名与类名匹配?因为如果你这样做了,你也不需要子命名空间,因为整个项目可能只是在一个命名空间中......
我想知道,我在思考……不确定这个问题是否足够具体。我想我的直接问题(假设布局有点明智)是如何解决冲突的 obj 文件?我只是想在维护类名的同时重命名文件。但我不太喜欢这种解决方案。
谢谢(抱歉问题太长了)
附:源码文件夹要兼容linux下的gcc
【问题讨论】:
-
如果你有很多(或者我会说任何)嵌套的命名空间,那你就错了。
-
@Neil:
detail命名空间可能是个例外,尽管这应该留给库编码员。 -
它不仅仅是 Visual Studio 2010。如果给定相同的源文件名,大多数 IDE 都会打嗝,因为它们都将中间文件构建到一个公共位置(通常是 Project/Debug)。这意味着任何重复命名的源文件都将编译为同一个 .obj 文件并相互覆盖。
标签: c++ layout namespaces directory