C++ Usando directiva


Ejemplo

La palabra clave 'usar' tiene tres sabores. Combinado con la palabra clave 'espacio de nombres' se escribe una 'directiva de uso':

Si no quieres escribir Foo:: delante de todas las cosas en el espacio de nombres Foo , puedes usar using namespace Foo; para importar cada cosa de Foo .

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

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

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

También es posible importar entidades seleccionadas en un espacio de nombres en lugar de todo el espacio de nombres:

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

Una advertencia: el using namespace en los archivos de encabezado se considera un estilo incorrecto en la mayoría de los casos. Si se hace esto, el espacio de nombres se importa en cada archivo que incluye el encabezado. Dado que no hay manera de "des- using " un espacio de nombres, esto puede conducir a la contaminación del espacio de nombres (más o símbolos inesperados en el espacio de nombres global) o, peor aún, conflictos. Vea este ejemplo para una ilustración 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 directiva de uso no puede ocurrir en el alcance de la clase.