2011-05-24 221 views
23

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

让我举个例子。比方说,我有以下标题:

namespace old 
{ 
    class SomeClass {}; 
} 

其中,原因不详必须成为:

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

现在,如果我有一个旧的代码库是指SomeClass,我可以很快(和dirtily )加入“修复”的变化:

namespace old 
{ 
    typedef _new::nested::SomeClass SomeClass; 
} 

但是,有没有办法从_new::nested进口一切我nto old而不必typedef明确每个类型?

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

谢谢。

+8

'new'可能是名称空间名称的一个坏例子。 ;) – Xeo 2011-05-24 10:00:58

回答

48
using namespace new::nested; 

Example at Ideone

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

namespace on = one::nested; 

Example at Ideone

+4

第二个比第一个好得多......第一个不创建别名,而是从其他名称空间带来符号,并且可能以名称冲突或不需要的结果结束(如果函数过载在'nested'命名空间比当前命名空间中的重载更好匹配,它会突然改变它的选择) – 2011-05-24 10:44:36

+0

@David:是的,但它似乎解决了OP似乎有问题。 :) – Xeo 2011-05-24 10:45:11

28

此:

namespace old = newns::nested; 

似乎是你想要的。