2012-03-23 18 views
1

私持っている私はリファクタリングだ次のコード:C++のネストされた名前空間エイリアスは可能ですか?

namespace Pi { ...classes... } // refactored Foo::Bar 
namespace Foo { namespace Bar = Pi; } // API compatibility 

このdoesnのを:I'ldは、APIの互換性を維持したい

namespace Foo 
{ 
    namespace Bar { ...classes... } 
} 

バーは現在、新しいトップレベルの名前空間に移動されていますが、 Foo :: Bar :: ClassをFoo :: Pi :: Classにエイリアスするので、Pi :: Classではなく、動作します。私が欲しいものを達成するための道があるのですか?

答えて

2

を、これはあなたが必要なものを行う必要があります。 Foo::Barのルックアップは、::Piという名前になります。

namespace Pi {} 
namespace Foo { namespace Bar { using namespace Pi; } } 

明らかに、これはバイナリ互換性を保持しません。

+0

Doh、あまりにも明白でした!ありがとう。 – eile

1

おっとは、あなたがそれを他の方法でラウンドしたい:私が正しく理解していれば

namespace Foo { 
    namespace Bar { 
    using namespace Pi; 
    } 
} 
関連する問題