¿Cómo acortar la sangría del espacio de nombres en los archivos de encabezado de C ++ sin usar 'usar'?

Si usa espacios de nombres para la separación de módulos/estructuración, el anidamiento y la sangría dentro del archivo de encabezado aumentan drásticamente. ¿Hay alguna forma de escribir el siguiente código de forma más corta?

namespace A
{
    namespace B
    {
        namespace C
        {
            namespace D
            {
                namespace E
                {
                    template <typename T>
                    public class X
                    {
                        public: ...

por ejemplo, como

namespace A::B::C::D::E
{
  template<typename T> ...
}

en el archivo de encabezado en c++?

preguntado el 22 de mayo de 12 a las 13:05

Trate de evitar un anidamiento tan profundo. -

¿Hay realmente una gran diferencia entre namespace A::B::C { y namespace A { namespace B { namespace C {? No tienes que sangrar todo como lo haces. -

La Guía de estilo de Google C ++ recomienda no sangrar los espacios de nombres. -

@Fiktik La diferencia es la legibilidad (que de hecho es una debilidad de c ++) -

2 Respuestas

No, esa sintaxis de espacios de nombres anidados se sugirió anteriormente en diferentes momentos y lugares, pero no es válida.

Sin embargo, no es necesario sangrar

namespace A { namespace B { namespace C {
// ...
} } } // namespace A::B::C

contestado el 22 de mayo de 12 a las 14:05

Puede usar alias de espacio de nombres. Esto no funciona para ampliar los espacios de nombres existentes, sino para facilitar el acceso.

Puede usar macros para ampliar los espacios de nombres existentes, pero Si necesita hacer esto, probablemente tenga una jerarquía de espacio de nombres más profunda de lo que necesita o desea.

contestado el 22 de mayo de 12 a las 13:05

La pregunta estaba en el contexto de declarar cosas en espacios de nombres en encabezados y no puede usar alias para eso, ya que no puede declarar cosas en un alias de espacio de nombres. ¿Y las macros? Eurgh. - jonathan wakely

Personalmente, no me gustan las definiciones de marcos/preprocesador y trato de evitarlas si es posible: Caminante de la playa

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.