在他的书《 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/

10-10 17:52