重命名命名空间

35

我已经学习C++很长时间了,但今天早上我遇到了一个问题,我无法回答:“在C++中是否可以为命名空间创建别名?”

让我举个例子。假设我有以下标头:

namespace old
{
  class SomeClass {};
}

由于未指定的原因,必须进行以下更改:

namespace _new
{
  namespace nested
  {
    class SomeClass {}; // SomeClass hasn't changed
  }
}

现在,如果我有一个旧代码库引用了 SomeClass,我可以通过添加以下内容来快速(且不规范地)“修复”更改:
namespace old
{
  typedef _new::nested::SomeClass SomeClass;
}

但是是否有一种方法可以将_new::nested中的所有内容导入到old中,而不必显式地typedef每个类型?

类似于Python中的import * from ...

谢谢。


11
"new" 可能不是一个好的命名空间名称,这可能是个糟糕的例子。 ;) - Xeo
2个回答

65

8
第二种方法比第一种好得多... 第一种方法没有创建别名,而是将符号从其他名称空间引入,这可能会导致名称冲突或意外结果(如果 nested 命名空间中的函数重载比当前命名空间中的重载更匹配,则它将突然更改选择)。 - David Rodríguez - dribeas
@David:是的,但它似乎解决了OP似乎遇到的问题。 :) - Xeo

34

这个:

namespace old = newns::nested;

看起来这就是你想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接