命名空间内的命名空间别名

Namespace alias inside a namespace

我有以下命名空间结构

namespace a::b::c
{
   class xyz{

   };

   using x=xyz
}
  1. 如果我想在外部文件中引用x,应该如何处理?是像 a::b::c::x 还是 x

  2. 为了能够在我的代码之外引用它作为x,我该如何更改上面的代码?我可以在命名空间 a::b::c 中写 using x=a::b::xyz 吗?

在命名空间a::b::c中引入名称x

namespace a::b::c
{
   class xyz{

   };

   using x=xyz
}

所以在全局命名空间中引用名称x你必须写

a::b::c::x

您可以在全局命名空间中引入别名,例如

using x = a::b::c::xyz;

或者您可以使用像

这样的 using 声明
using a::b::c::x;

在这种情况下,您可以在放置 using 声明的范围内使用非限定名称 x

好的,您需要了解 namespace 表示新名称 space 以便区分可能相似的名称。

当您使用:namespace a::b::c 时,您会在其中的所有名称中添加前缀 a::b::c,因此,您必须像您提到的那样使用 a::b::c::x 来调用它(并且您可以自己轻松检查!)。只有那个名字space的里面,才可以作为x.

使用

你可以把它包含在名字space中,放在using a::b::c::x中,在其他地方使用,但我不明白你为什么要这样做。

如果想到处使用,就把using x = a::b::c::x放在名字外面space .

但是,namespace的创建是出于好的目的,请避免通过执行任何这些操作来删除 namespace 前缀,这只是一个坏习惯。