Espacios de nombres en línea y uso de la directiva «using» dentro de los espacios de nombres

Requisito previo: espacios de nombres en C++
Un espacio de nombres en línea es un espacio de nombres que usa la palabra clave opcional en línea en su definición de espacio de nombres original.
 

CPP

// C++ program to demonstrate working of
// inline namespaces
#include <iostream>
using namespace std;
 
namespace ns1
{
   inline namespace ns2
   {
       int var = 10;
   }
}
 
int main()
{
   cout << ns1::var;
   return 0;
}

Producción:  

10

Podemos ver en el ejemplo anterior que los miembros de un espacio de nombres en línea se tratan como si fueran miembros del espacio de nombres adjunto en muchas situaciones (enumeradas a continuación). Esta propiedad es transitiva: si un espacio de nombres N contiene un espacio de nombres en línea M, que a su vez contiene un espacio de nombres en línea O, entonces los miembros de O se pueden usar como si fueran miembros de M o N.

CPP

// C++ program to demonstrate working of
// inline namespaces inside inline namespaces
 
#include <iostream>
using namespace std;
 
namespace ns1
{
    inline namespace ns2
    {
        inline namespace ns3
        {
            int var = 10;
        }
    }
}
 
int main()
{
    cout << ns1::var;
    return 0;
}

Producción:  

10

El especificador en línea hace que las declaraciones del espacio de nombres anidado aparezcan exactamente como si se hubieran declarado en el espacio de nombres adjunto. Esto significa que extrae la declaración («var» en el ejemplo anterior) de un espacio de nombres anidado al espacio de nombres que lo contiene.
Ventajas de usar espacios de nombres en línea: 

  • Evite verbose: considere el código anterior, si desea imprimir «var», escriba: 
  cout << ns1::ns2::ns3::var;
  • Esto se ve bien solo si los nombres de los espacios de nombres son cortos como en el ejemplo anterior. Pero al usar en línea con espacios de nombres no hay necesidad de escribir el espacio de nombres completo como se indicó anteriormente o usar la directiva «usar».
  • Compatibilidad con la biblioteca: el mecanismo de espacio de nombres en línea está destinado a respaldar la evolución de la biblioteca al proporcionar un mecanismo que admita una forma de control de versiones. Consulte esto para más detalles.

Directiva «usando»

Este mismo comportamiento (igual que los espacios de nombres en línea) también se puede lograr usando el declarativo «usando» dentro de los espacios de nombres. Una directiva de uso que nombra el espacio de nombres en línea se inserta implícitamente en el espacio de nombres adjunto (similar a la directiva de uso implícita para el espacio de nombres sin nombre). Considere el siguiente código C++: 

CPP

// C++ program to demonstrate working
// of "using" to get the same effect as
// inline.
#include <iostream>
using namespace std;
 
namespace ns1
{
    namespace ns2
    {
        namespace ns3
        {
            int var = 10;
        }
        using namespace ns3;
    }
     
    using namespace ns2;
}
 
int main()
{
    cout << ns1::var;
    return 0;
}

Producción :  

10

Aquí nuevamente, la directiva using hace que las declaraciones del espacio de nombres anidado aparezcan exactamente como si hubieran sido declaradas en el espacio de nombres adjunto.
Consulte también: Anidamiento de espacios de nombres  
Referencias: http://en.cppreference.com/w/cpp/language/namespace
Este artículo es una contribución de Arnav Shrivastava . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *