0

我目前正在思考什么可以让我的(合理的)大库看起来不太胖,一些贡献者建议使用多个命名空间来对事物进行分类。

虽然我理解需要为这个库的用户明确说明,但我怀疑命名空间是否是一个合适的解决方案,因为它使编写代码更加冗长,例如:

namespace1::namespace2::namespace3::SomeClass myObject* = new namespace1::namespace2::namespace3::SomeClass();

这个 c++ 特性在社区中的一般用途是什么?

整个库的单个命名空间+类的命名约定,或者 doxygen 文档中的 \addtosection 会更好吗?

4

3 回答 3

2

整个库是否有一个命名空间?

命名空间的主要目的是避免类似符号名称的问题以及由此产生的符号名称冲突。
最好为您的库和有意义的指示性类名提供一个命名空间。这将有助于避免命名类以及不太笨拙。

你可以一直使用,

如果您有嵌套的命名空间,无论出于何种原因都无法避免。

于 2012-10-04T10:16:37.840 回答
1

使用命名空间别名可以使深层命名空间级别变得漂亮,所以我不会认为这是一个很大的问题。这也是你不能用在类名前面加上模块名的命名约定来做的事情。

我认为 doxygen 中的组织与实际命名是正交的。如果您的代码没有明确的包含依赖项,则可以使用 doxygen 组。否则,我会以 doxygen 页面的形式提供文件级文档和文件层次结构指南。这样我就不需要手动对事物进行分组并同时检查我的包含。

于 2012-10-04T10:17:35.093 回答
0

这是Boost使用的方法。但是 Boost 是一个库的集合,每个库都在自己的命名空间中。

在函数内部,如果需要,您可以使用using指令来减轻一些负担,例如using namespace std::placeholders, 或using std::placeholders::_1.

或者您可以使用命名空间别名:namespace ns = name1::name2::name3.

最好的整体实际上是创建几个小的独立库,它们对彼此做出尽可能少的假设,并给它们一个不同的命名空间。如果这不可能,您可能需要查看一般设计。

于 2012-10-04T10:16:22.653 回答