2017-03-17 7 views
1

Ist es möglich, den Namen eines äußeren Namespace für einige Funktionen aus einem anderen Namespace in der obersten Ebene wegzulassen?Verwenden von Funktionen aus dem Namespace in einem anderen Namespace

void sample_func(); 

namespace foo { 
void first_func(); 

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

Alles für first_func() trivial ist: nur die Eingabe using foo::first_func; erlaubt es zu nennen wie fist_func();

Alles ist einfach, wenn ich second_func ohne Präfix nennen wollen: nur using foo::bar::second_func; erlaubt es zu nennen wie second_func();

Aber gibt es eine Möglichkeit, es als bar::second_func(); zu nennen? Es wird Code Lesbarkeit erhöhen - viel besser zu tippen und etwas wie bar::sample_func anstelle von vollen foo::bar::sample_func ohne Namen Verwirrung sehen: offensichtlich using namespace foo::bar ist in diesem Fall keine Option.

UPD Ich bin nicht daran interessiert, die ganzen foo oder bar Namespace in dem Import (dh using namespace ... Direktive! Ich brauche von ihnen einige Funktionen nur.

Antwort

1

können Sie verwenden

namespace bar = foo::bar; 

foo::bar in aktuellen Namensraum zu importieren als nur bar.

0

Präfix mit den namespace:: oder ::, wenn nicht in einem Namensraum, dh

::sample_func(); 

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

Es erfordert 'using namespace ...', i. e. Jede Funktion aus dem globalen Namespace mit verwechseltem Namen sollte mit '::' vorangestellt sein. Ich brauche nur ein paar extensiv genutzte Funktionen aus 'foo' und' bar', ohne den gesamten Namespace freizulegen. – avtomaton

0

können Sie verwenden

using namespace foo; 

in jeder deklarativen Region, in der Sie nur first_func() und bar::sample_func() verwenden möchten.

Beispiel:

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

Nicht der beste Weg: foo kann sehr sehr groß sein, ich möchte nicht alle Namen davon vollständig importieren, nur einige Funktionen in 'foo :: bar' Namensraum, aber ich brauche die Trennung zwischen den Namen in' foo :: bar' und Namen im globalen Namespace. – avtomaton

Verwandte Themen