2017-03-17 22 views
1

一部の関数の外部名前空間名を最上位階層の他の名前空間から省略することはできますか?他の名前空間内の名前空間からの関数の使用

void sample_func(); 

namespace foo { 
void first_func(); 

namespace bar { 
void second_func(); 
void sample_func(); 
} 

すべてがfirst_func()のために簡単です:ちょうどusing foo::bar::second_func;second_func();

としてそれを呼び出すことができます:ちょうど using foo::first_func;を入力すると、私は任意の接頭辞なし second_funcを呼び出したい場合は fist_func();

すべてがシンプルで同じようにそれを呼び出すことができます

しかし、それをbar::second_func();と呼ぶ方法はありますか?コードの可読性が向上します。入力すると、foo::bar::sample_funcではなく、bar::sample_funcのようなものが表示され、名前の混乱はありません。明らかに、using namespace foo::barはオプションではありません。

UPDは、私は、全体のfooまたはbar名前空間をインポートすることに興味を持っていないです(つまりusing namespace ...指令!私は彼らからちょうどいくつかの機能を必要としています。namespace::または::

答えて

1

あなただけbarように、現在の名前空間にfoo::barをインポートする

namespace bar = foo::bar; 

を使用することができます。

0

プレフィックスを名前空間すなわちでない場合

::sample_func(); 

foo::first_func(); 
bar::second_func(); 
bar::sample_func(); 
+0

これは 'using namespace ...'が必要です。 e。名前が混同されているグローバル名前空間のすべての関数の先頭に '::'を付ける必要があります。私は、 'foo'と' bar'から広範囲に使用される関数のサブセットをすべての名前空間を公開することなく必要とします。 – avtomaton

0

あなたは

using namespace foo; 
012を使用することができます

は、使用する宣言的な領域では、first_func()bar::sample_func()となります。

例:

int main() 
{ 
    using namespace foo; 
    first_func(); 
    bar::sample_func(); 
} 
+0

最善の方法ではありません:fooは非常に大きくなる可能性がありますが、 'foo :: bar'名前空間の一部の関数を完全にインポートする必要はありませんが、' foo :: bar'とグローバル名前空間の名前。 – avtomaton

関連する問題