将命名空间缩小到基

shrinking namespace to base

本文关键字:缩小 命名空间      更新时间:2024-05-23

是否有"缩小命名空间"的方法?

例如

std::chrono::millisecondsstd::milliseconds

namespace std = std::chrono

(请忽略这是在修改std的事实。这只是一个我想每个人都能理解的例子(

将您自己的别名添加到std::chronostd:外部

namespace chrono = std::chrono;

然后使用chrono::milliseconds


可以通过添加内部名称空间别名来折叠名称空间层。标准库是这样做的:

namespace std {
namespace ranges::views { /* views stuff */ }
namespace views = ranges::views;
}

使得CCD_ 7也可以作为CCD_。

但这在这里没有帮助,因为milliseconds是一种类型,而不是命名空间。折叠名称空间内容的唯一方法是使用using指令(或者等效地,一大堆using声明(:

namespace std {
namespace chrono { /* chrono things */ }
using namespace chrono;
}

这不是一个好主意,因为它可能会破坏事物的名称查找,尤其是如果std::chrono中的任何事物的名称与std中的某些事物的名称相同。这也完全违背了从一开始就使用嵌套命名空间的目的。

因此,与内部名称空间别名等效的只是外部名称空间别名:

namespace std {
namespace chrono { /* chrono things */ }
}
namespace chrono = std::chrono;

现在您可以编写chrono::milliseconds而不是std::chrono::milliseconds,而不必破坏任何这些名称空间中的任何内容。

或者,如果你真的想把所有东西都塞进同一个命名空间,那就把它放到另一个命名空间:

namespace all {
using namespace std;
using namespace std::chrono;
}

尽管,正如我所说,值得怀疑。

如果您有一个名称空间,其中有一些深度嵌套的名称要缩短(并且它是允许您修改的名称空间(。例如:

namespace my {
namespace deeply {
namespace nested {
namespace ns {
// ...
}}}}

您可以使用名称空间别名来简化它

namespace my {
namespace easy = deeply::nested::ns;
}

有办法"缩小命名空间";?

您可以给命名空间一个别名,也可以有using namespace声明。

例如

std::chrono::毫秒到std::毫秒

类似的东西是可能的,但对于std命名空间来说是不可能的,因为您可能不会在那里放置这样的声明。

但这是可能的,例如:

namespace my {
using namespace std::chrono;
}

这个:

namespace my_chrono = std::chrono;