【发布时间】:2013-06-01 09:50:29
【问题描述】:
在他的书C++ 编程语言(第三版)中,Stroustrup 教导如何在自己的命名空间中定义单个组件并将它们导入到通用命名空间中。
例如:
namespace array_api {
struct array {};
void print(const array&) { }
}
namespace list_api {
struct list {};
void print(const list&) { }
}
namespace api {
using array_api::array;
using list_api::list;
}
我看起来很有趣,但我从未见过实际使用过这种方法。
为什么这种技术几乎从不使用?
【问题讨论】:
-
我会说因为它需要更多的努力而不是不做:P 人们是懒狗
-
在大多数情况下,因为人们不知道它的用途,以及它会给项目带来什么好处。
-
反例:提升。大多数 boost 库都有自己的命名空间,然后提供 方便的标头,不仅包含许多标头,而且还可以在命名空间层次结构中将其符号导入上一级,直到主级别 @987654322 @标头。
-
正如 B. Stroustroup 自己指出的那样,它的用处在大型项目中最为明显(例如 Boost)——“命名空间是一个范围。因此,‘命名空间’是一个非常基本且相对的简单的概念。程序越大,命名空间就越有用,可以表达其部分的逻辑分离。普通的局部作用域、全局作用域和类都是命名空间。"
-
对你有好处。我确实看到使用像这样或像 java 这样的命名空间,这是一个可怕的混乱。在我有权力的地方,我允许每个说 250 KLOC 的名称空间。如果你发布一个库,当然,把它放在它自己的单一命名空间中,但在应用程序中它通常只会造成麻烦。
标签: c++