Google
 

miércoles, diciembre 13, 2006

C++: Namespaces sin nombre

Supongo que todo el mundo conoce para que sirve el namespace de C++. Lo que ya no es tan conocido es que se pueden crear espacios de nombres sin tener que asignarle un nombre, será entonces el compilador el que se encargue de darle un nombre único a voleo del que no tendremos conocimiento. ¿Y esto para que sirve? Pues los dos usos principales son:

1º Para poder abrir un espacio de nombres de forma local en lugar de en todo el archivo entero:
namespace MiSuperLibreria {
  class Torcuato {
    // …
  };
};

namespace {
  using namespace MiSuperLibreria;

  Torcuto variable1;
};

MiSuperLibreria::Torcuato variable2;
Torcuato variable3; // Aquí dará error el compilador
2º Uno de los usos de static es el indicar que una variable únicamente ha de poder verse en el archivo en el que se ha declarado. Pero con la llegada de C++ la forma correcta de hacer esto es usando los espacios de nombres sin nombre:

#include <iostream>

namespace {
  int variable;
};

int main() {
  std::cout << variable << std::endl;
}

Por último tened en cuenta que el compilador C++ de Microsoft no se lleva demasiado bien con los namespace sin nombre así que si lo usáis es mejor desactivar las cabeceras precompiladas.

No hay comentarios: