C++ Usando la direttiva


Esempio

La parola chiave 'using' ha tre sapori. Combinato con la parola chiave 'namespace' scrivi una 'direttiva using':

Se non vuoi scrivere Foo:: davanti a tutte le cose nel namespace Foo , puoi usare using namespace Foo; per importare ogni singola cosa da Foo .

namespace Foo
{
    void bar() {}
    void baz() {}
}

//Have to use Foo::bar()
Foo::bar();

//Import Foo
using namespace Foo;
bar(); //OK
baz(); //OK

È anche possibile importare entità selezionate in uno spazio dei nomi anziché nell'intero spazio dei nomi:

using Foo::bar;
bar(); //OK, was specifically imported
baz(); // Not OK, was not imported

Una parola di cautela: l' using namespace nei file di intestazione è visto come uno stile sbagliato nella maggior parte dei casi. Se ciò è fatto, lo spazio dei nomi viene importato in ogni file che include l'intestazione. Poiché non c'è modo di "non using " uno spazio dei nomi, questo può portare all'inquinamento dello spazio dei nomi (simboli più o inaspettati nello spazio dei nomi globale) o, peggio, ai conflitti. Vedi questo esempio per un'illustrazione del problema:

/***** foo.h *****/
namespace Foo
{
    class C;
}

/***** bar.h *****/
namespace Bar
{
    class C;
}

/***** baz.h *****/
#include "foo.h"
using namespace Foo;

/***** main.cpp *****/
#include "bar.h"
#include "baz.h"

using namespace Bar;
C c; // error: Ambiguity between Bar::C and Foo::C

Una direttiva using non può verificarsi nell'ambito della classe.