重命名命名空间

ere*_*eOn 26 c++ alias namespaces

我已经做了很长时间的C++但是我今天早上遇到了一个问题,我无法给出答案:"是否可以在C++中为命名空间创建别名?"

让我举个例子.假设我有以下标题:

namespace old
{
  class SomeClass {};
}
Run Code Online (Sandbox Code Playgroud)

其中,由于未指明的原因,必须成为:

namespace _new
{
  namespace nested
  {
    class SomeClass {}; // SomeClass hasn't changed
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个旧的代码库引用SomeClass,我可以通过添加以下内容快速(并且肮脏地)"修复"更改:

namespace old
{
  typedef _new::nested::SomeClass SomeClass;
}
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法进口一切_new::nested进入old,而不必typedef明确地定义每一种类型?

与Python类似的东西import * from ....

谢谢.

Xeo*_*Xeo 54

using namespace new::nested;
Run Code Online (Sandbox Code Playgroud)

Ideone上的示例.

或者如果你真的想要一个真正的别名:

namespace on = one::nested;
Run Code Online (Sandbox Code Playgroud)

Ideone上的示例.

  • 第二个比第一个好得多......第一个没有创建别名,而是从另一个命名空间中带来符号,这可能最终导致名称冲突或不需要的结果(如果函数重载在`嵌套`命名空间是比当前命名空间中的重载更好的匹配,它会突然改变它的选择) (6认同)

小智 31

这个:

namespace old = newns::nested;
Run Code Online (Sandbox Code Playgroud)

似乎是你想要的.