在他的书《 C++编程语言(第三版)》中,Stroustrup教导了在其自己的 namespace 中定义各个组件并将其导入通用 namespace 中的方法。
例如:
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;
}
我看起来很有趣,但是我从未见过这种方法在实践中使用过。
为什么这种技术几乎从未使用过?
最佳答案
大多数情况下,我想知道这样做会有什么好处(正如Raymond Chen所说,每个功能都以-100点开头)。但是,我有一个对立面:Luabind,它确实使用了类似如下的内容。参见luabind/object.hpp,它基本上说:
namespace luabind {
namespace adl {
class object {
};
}
using adl::object;
}
仅从名称上,我们就可以推断出动机:支持依赖于参数的查找。给定用户所知道的
luabind::object
(实际上是luabind::adl::object
),编译器将从luabind::adl
命名空间中自动发现相关功能。但是,用户可能不需要以非常明确的方式知道的那些功能不会“污染”主luabind
namespace 。我想那很好。但是你知道什么不好吗?转发声明这些类之一。这将失败:
namespace luabind { class object; }
您需要这样做:
namespace luabind { namespace adl { class object; } }
因此,抽象很快就会泄漏,因为用户毕竟需要了解这个不可思议的
adl
命名空间。关于c++ - 为什么很少使用 namespace 组合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16871390/