2011-05-24 231 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; 

似乎是你想要的。