Cambié de C ++ a Java y C # y creo que el uso de espacios de nombres / paquetes es mucho mejor allí (bien estructurado). Luego volví a C ++ e intenté usar los espacios de nombres de la misma manera, pero la sintaxis requerida es horrible dentro del archivo de encabezado.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Lo siguiente también me parece extraño (para evitar la sangría profunda):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
¿Existe una forma más corta de expresar lo anterior? Me falta algo como
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Actualizar
Ok, algunos dicen que el concepto de uso en Java / C # y C ++ es diferente. De Verdad? Creo que la carga de clases (dinámica) no es el único propósito de los espacios de nombres (esta es una perspectiva razonada muy técnica). ¿Por qué no debería usarlo para una legibilidad y estructuración, por ejemplo, pensar en "IntelliSense"?
Actualmente, no hay lógica / pegamento entre un espacio de nombres y lo que puede encontrar allí. Java y C # hacen esto mucho mejor ... ¿Por qué incluir <iostream>
y tener espacio de nombres std
? Ok, si dices que la lógica debería depender del encabezado para incluir, ¿por qué #include no usa una sintaxis amigable con "IntelliSense" como #include <std::io::stream>
o <std/io/stream>
? Creo que la estructuración que falta en las bibliotecas predeterminadas es una debilidad de C ++ en comparación con Java / C #.
Si la exclusividad de los conflictos ávidos es un punto (que también es un punto de C # y Java), una buena idea es usar el nombre del proyecto o el nombre de la empresa como espacio de nombres, ¿no lo crees?
Por un lado, se dice que C ++ es el más flexible ... ¿pero todos dijeron "no hagas esto"? Me parece que C ++ puede hacer muchas cosas, pero tiene una sintaxis horrible incluso para las cosas más fáciles en muchos casos en comparación con C #.
Actualización 2
La mayoría de los usuarios dicen que no tiene sentido crear un anidamiento más profundo que dos niveles. Ok, ¿qué pasa con los espacios de nombres de Windows :: UI :: Xaml y Windows :: UI :: Xaml :: Controls :: Primitives en el desarrollo de Win8? Creo que el uso de espacios de nombres por parte de Microsoft tiene sentido y, de hecho, es más profundo que solo 2 niveles. Creo que las bibliotecas / proyectos más grandes necesitan un anidamiento más profundo (odio los nombres de clases como ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... entonces también podría poner todo en el espacio de nombres global).
Actualización 3 - Conclusión
La mayoría dice "no lo hagas", pero ... incluso el impulso tiene un anidamiento más profundo que uno o dos niveles. Sí, es una biblioteca, pero: si desea un código reutilizable, trate su propio código como una biblioteca que le daría a otra persona. También utilizo un anidamiento más profundo con fines de descubrimiento utilizando espacios de nombres.
namespace
palabras clave?