2017-01-13 18 views
0

は、私がboost::joinとしてboost::algorithm::joinを呼び出したいことを考えてみましょうが、私のようにグローバル名前空間にサブ名前空間をインポートしない:私はboost::joinを呼び出したいので名前空間エイリアス

namespace boost { 
    using algorithm::boost; 
}; 

のみ特定の機能のローカルスコープ内のその構文は:

void my_fun() 
{ 
    namespace boost { // Doesn't allowed syntax in local scope 
     using algorithm::join; 
    } 

    auto ret = boost::join(something...); 
} 

別のアプローチは次のようになります

void my_fun() 
{ 
    using boost::algorithm::join; 
    auto ret = join(something...); 
} 

しかし、これはADLルックアップを引き起こし、私はどのメソッドを呼び出しているか知っているので、そのようなルックアップをしたくありません。boost::algorithm::join

私は、それを呼び出す方法がより短いboost::joinを見つけることを試みています。 「サブネームスペース」エイリアスを作成するための正しい構文やイディオムは何ですか?

+1

[名前空間エイリアス](http://en.cppreference.com/w/cpp/language/namespace_alias)を使用できるような音 – NathanOliver

+0

他の人の名前空間を混乱させないでください。あなた自身の 'namespace boost_misc'やそれを呼びたいものを作ることができますが、' namespace boost'に名前を追加しないでください。 –

+0

私はあなたがADLに対して持っていることを理解していませんか?とにかく、コンパイル時にのみ実行時に起こることではありません。これはあなたが持っている問題に対する非常に簡単な解決策です。 –

答えて

1

あなたが汚染することではないBoost名前空間を汚染することなくこれを行うことはできません。

恐らく、次の妥協案があなたに役立つでしょうか?

namespace balgo = boost::algorithm; 

balgo::joinを使用します。

わかりやすい名前ではありませんが、限定された範囲で短いエイリアスを作成しようとしています。

そうでなければ、影響を受けた領域は、単純なjoinが明確で曖昧でない(すなわち、using namespace boost::algorithm)ように十分小さくなければなりません。それ以外の場合は、完全修飾名を使用してください。あなたのチームはそれに感謝します。