¿Hay una mejor manera de expresar espacios de nombres anidados en C ++ dentro del encabezado?

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
     {

¿Hay una manera 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 facilitar la lectura 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 nombresstd? De acuerdo, si dice que la lógica debe basarse en el encabezado a incluir, ¿por qué el #include no usa una sintaxis amigable de "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 unicidad a 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 cree?

Por un lado, se dice que C ++ es el más flexible ... pero todos decían "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. Bien, ¿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 los 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 clase como ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... y luego podría poner todo en el espacio de nombres global).

Actualización 3 - Conclusión

La mayoría dice "no lo hagas", pero ... incluso boost 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 uso un anidamiento más profundo para propósitos de descubrimiento utilizando espacios de nombres.

Respuestas a la pregunta(10)

Su respuesta a la pregunta