gpt4 book ai didi

c++ - 为什么命名空间组合很少使用?

转载 作者:IT老高 更新时间:2023-10-28 22:05:12 24 4
gpt4 key购买 nike

在他的书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;
}

我看起来很有趣,但我从未见过实际使用过这种方法。

为什么这种技术几乎从未使用过?

最佳答案

我主要想知道有什么好处(正如 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 luabind { class object; }

您需要这样做:

namespace luabind { namespace adl { class object; } }

因此抽象很快泄漏,因为用户确实需要了解这个魔法adl毕竟命名空间。

关于c++ - 为什么命名空间组合很少使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com