2011-05-24 22 views
23

私は長い間C++をやってきましたが、今朝は「C++で名前空間のエイリアスを作成することはできますか?名前空間の名前を変更する

例を挙げておきます。すぐに私ができる、私は古いコードベースを持っている場合今SomeClassをいう

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

(とdirtily:

、不特定の理由のためになるために持っていた、
namespace old 
{ 
    class SomeClass {}; 
} 

:のは、私は次のヘッダーを持っていたとしましょう)を追加することによって変更を「修正」:

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

をしかし_new::nestedからすべてをインポートする方法がありますI nto oldtypedef明示的にすべてのタイプにする必要はありませんか?

Python import * from ...と似たようなものです。

ありがとうございます。

+8

'new'はおそらくネームスペース名の悪い例です。 ;) – Xeo

答えて

48
using namespace new::nested; 

Example at Ideone

それとも、実際に本物の別名たい場合:

namespace on = one::nested; 

Example at Ideoneを。

+4

2番目のものは最初のものよりはるかに優れています...最初のものはエイリアスを作成せず、シンボルを別の名前空間から取り込み、名前の衝突や望ましくない結果に終わる可能性があります(関数のオーバーロード'ネストされた'ネームスペースでは現在のネームスペースのオーバーロードよりも良いマッチングですが、突然ピックを変更します) –

+0

@David:はい、OPが持つような問題を解決するようです。 :) – Xeo

28

この:

namespace old = newns::nested; 

はあなたが望むものであるように見えるでしょう。