13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 282 — #320<br />

✐<br />

Capítulo 10. Control de nombres<br />

//: C10:MyLib.cpp<br />

namespace MyLib {<br />

// Declarations<br />

}<br />

int main() {} ///:~<br />

Ese código crea un nuevo espacio de nombres que conti<strong>en</strong>e las declaraciones incluidas<br />

<strong>en</strong>tre las llaves. De todas formas, exist<strong>en</strong> difer<strong>en</strong>cias significativas <strong>en</strong>tre class,<br />

struct, <strong>en</strong>um y union:<br />

Una definición con namespace solam<strong>en</strong>te puede aparecer <strong>en</strong> un rango global<br />

de visibilidad o anidado d<strong>en</strong>tro de otro namespace.<br />

No es necesario un punto y coma tras la llave de cierre para finalizar la definición<br />

de namespace.<br />

Una definición namespace puede ser "continuada" <strong>en</strong> múltiples archivos de<br />

cabecera utilizando una sintaxis que, para una clase, parecería ser la de una<br />

redefinición:<br />

//: C10:Header1.h<br />

#ifndef HEADER1_H<br />

#define HEADER1_H<br />

namespace MyLib {<br />

extern int x;<br />

void f();<br />

// ...<br />

}<br />

#<strong>en</strong>dif // HEADER1_H ///:~<br />

El posible crear alias de un namespace de forma que no hace falta que teclee un<br />

<strong>en</strong>revesado nombre creado por algún frabricante de librerías:<br />

//: C10:BobsSuperDuperLibrary.cpp<br />

namespace BobsSuperDuperLibrary {<br />

class Widget { /* ... */ };<br />

class Poppit { /* ... */ };<br />

// ...<br />

}<br />

// Too much to type! I’ll alias it:<br />

namespace Bob = BobsSuperDuperLibrary;<br />

int main() {} ///:~<br />

No puede crear una instancia de un namespace tal y como puede hacer con una<br />

clase.<br />

Espacios de nombres sin nombre<br />

Cada unidad de traducción conti<strong>en</strong>e un espacio de nombres sin nombre al que<br />

puede referirse escribi<strong>en</strong>do «namespace» sin ningún id<strong>en</strong>tificador.<br />

282<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!