Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Dic 22, 2014 in C/C++ | 0 comments

Namespace: C/C++ Espacio de nombres

Namespace: C/C++ Espacio de nombres

C++ Espacio de nombres o namespace

Definición

Muchas de las bibliotecas que podemos utilizar en C++ tendrán un espacio de nombres (o namespace en ingles) definido, este usualmente es particular para las instrucciones de la biblioteca. Vamos a encontrar espacio de nombres para bibliotecas C++ para por ejemplo OpenCV, Beaglebone Black, Raspberry PI, Arduino, AVR, PIC, etc.

Un espacio de nombres sirve para distinguir entre funciones que puedan llegar a tener un nombre similar en dos bibliotecas diferentes, un clásico ejemplo son las bibliotecas con funciones con nombre de “fprintf” en donde existen varias bibliotecas con ese nombre de función. En la literatura podemos encontrar varios ejemplos en donde se hace referencia a dos personas con el mismo nombre dentro de un salón y la confusión que esto puede generar al llamar a una de las dos solo con el nombre sin hacer referencia a algún otro parametro como apellido, apodo, descripción fisica, etc.

namespace1

Confusión al llamar una función.

namespace2

Uso del namespace para diferenciar funciones.

Declarar un namespace

Supongamos un pequeño ejemplo en donde nosotros creamos o descargamos bibliotecas para nuestro programa, digamos que por ahí en nuestro programa principal mandamos llamar la siguiente función

int resultado = operacion(5,3);

Suponiendo que tenemos entre otras bibliotecas, dos de ellas, que tienen declaradas las función “operación” se encuentran agregadas en nuestro programa principal. Suponiendo que las funciones están declaradas como se muestra a continuación:

foo.h

int respuesta = operación ( int a, int b){
                return a+b;
}
bar.h

int respuesta = operación ( int a, int b){
                return a-b;
}

Entonces cuando se mande a llamar en el programa,

int resultado = operacion(5,3);

la variable resultado que valor tendría 8 o 2?. Es por esto que se hace uso de espacio de nombres en donde nos quedaría como sigue.

foo.h

namespace na{
int respuesta = operación ( int a, int b){
                return a+b;
    }
}
bar.h

namespace nb{
int respuesta = operación ( int a, int b){
                return a-b;
    }
}

 

Uso de un namespace

En donde al momento de llamar el código podemos mandar a llamar un espacio de nombres de la siguiente manera:

using namespace na
int resultado = operacion(5,3);

En este caso la respuesta seria 2, y si llamamos

using namespace nb
int resultado = operacion(5,3);

La respuesta seria 8.

Aunque podemos llamar al inicio del programa el espacio de nombres con la función “using namespace” lo mas recomendamble es mandar llamar para cada función su espacio de nombres, aunque es un poco mas pesado a la hora de escribir, evitaremos manejar un solo espacio de nombres y caer en problemas similares, lo mas correcto seria:


int resultado1 = nb::operacion(5,3);
int resultado2 = na::operacion(5,3);

en donde resultado1 tendria un valor de 2 y resultado2 tendra el valor de 8.

En la mayoría de los casos bastara con usar “using namespace” sin embargo es importante conocer la diferencia entre usar un solo espacio de nombres y usarlos en especifico, ya depende de cada uno como es que desee utilizarlos, espero que quede claro este tutorial y te ayude a entender un poco mas acerca del espacio de nombres.

Es muy probable que sean pocas las veces que necesites crear una biblioteca con namespace o espacio de nombres predefinido, sin embargo estamos mas que seguros que mas de una vez te tocara utilizar o ver un namespace y esperamos que cuando lo hagas con la información presentada ayude un poco a entender la función.

Este tutorial fue escrito por staff de HeTPro:
www.hetpro.com
www.hetpro.com.mx
http://en.wikipedia.org/wiki/Namespace

Post a Reply

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