Uso de la Composición de Espacios de Nombres
Las mejores prácticas en programación sugieren el secuestro de nuevos datos o la funcionalidad en un espacio de nombres único y con nombre sano cuando sea posible. Esto se considera una ventaja sobre el volcado de todo en el espacio de nombres global, ya que la búsqueda de nombres puede habilitarse explícitamente o habilitarse como se indica anteriormente, los símbolos se mutilan constantemente sin prefijos de nombres repetitivos o macros, etc.
Por ejemplo, considere un proyecto que define la mayoría de sus clases en namespace gtk
. Es posible adaptar namespace gtk
a namespace std
utilizando una característica de C++llamada composición de espacio de nombres. Esto es lo que sucede si la declaración de uso se coloca en una definición de espacio de nombres: los símbolos importados se importan a los espacios de nombres actualmente activos. Por ejemplo:
namespace gtk{ using std::string; using std::tr1::array; class Window { ... };}
En este ejemplo, std::string
se importa anamespace gtk
. El resultado es que el uso destd::string
dentro del espacio de nombres gtk solo puede usar string
, sin la qualification.As una ventaja añadida,std::string
no se importa en el espacio de nombres global. Además, se puede hacer una disposición más elaborada para compatibilidad con versiones anteriores y portabilidad, por lo que las declaracionesusing
pueden empaquetarse en macros que se establecen en base a pruebas autoconf a «» o, por ejemplo, using std::string;
(dependiendo de si el sistema tiene libstdc++ en std::
o no). (ideas de Llewelly y Karl Nelson)