¿Cuándo tendremos algún uso práctico para los espacios de nombres jerárquicos en C++?

StackOverflow https://stackoverflow.com/questions/117110

  •  02-07-2019
  •  | 
  •  

Pregunta

Puedo entender el uso de un nivel de espacios de nombres.Pero 3 niveles de espacios de nombres.Parece una locura.¿Hay algún uso práctico para eso?¿O es simplemente una idea errónea?

¿Fue útil?

Solución

Los espacios de nombres jerárquicos tienen una utilidad porque permiten definiciones progresivamente más refinadas.Ciertamente, un único proveedor puede producir dos clases con el mismo nombre.A menudo, el primer nivel lo ocupa el nombre de la empresa, el segundo especifica el producto y el tercero (y posiblemente más) proporciona el dominio.

También existen otros usos de la segregación de espacios de nombres.Una situación popular es colocar las clases base para un patrón de fábrica en su propio espacio de nombres y luego las fábricas derivadas en sus propios espacios de nombres por proveedor.P.ej. System.Data, System.Data.SqlClient y System.Data.OleDbClient.

Otros consejos

Obviamente es una cuestión de opinión.Pero en realidad todo se reduce a la organización.Por ejemplo, tengo un proyecto que tiene una API de complemento que tiene funciones/objetos que se parecen a esto:

plugins::v1::function

Cuando se implemente 2.0, se colocarán en el subespacio de nombres v2.Planeo solo desaprobar pero nunca eliminar los miembros v1 que deberían soportar la compatibilidad con versiones anteriores en el futuro.Este es sólo un ejemplo de uso "sano".Imagino que algunas personas no estarán de acuerdo, pero como dije, es una cuestión de opinión.

Las grandes bases de código lo necesitarán.Mire el impulso como ejemplo.No creo que nadie llame "loco" al código de refuerzo.

Si considera el hecho de que en cualquier nivel de una jerarquía, las personas solo pueden comprender en algún lugar del orden de 10 elementos, entonces dos niveles solo le dan 100 como máximo.Un proyecto suficientemente grande necesitará más, por lo que fácilmente puede terminar en 3 niveles de profundidad.

Trabajo en la aplicación XXX en mi empresa yyy y estoy escribiendo un subsistema GUI.Entonces uso yyy::xxx::gui como mi espacio de nombres.

Puedes encontrarte fácilmente en una situación en la que necesites más de un nivel.Por ejemplo, su empresa tiene un espacio de nombres gigante para todo su código para separarlo del código de terceros, y usted está escribiendo una biblioteca que desea colocar en su propio espacio de nombres.Generalmente, siempre que tenga un sistema muy grande y complejo, que esté dividido jerárquicamente, es razonable utilizar varios niveles de espacio de nombres.

Depende de tus necesidades y estilo de programación.Pero uno de los beneficios de namespace es para ayudar al espacio de nombres de partición (de ahí el nombre).Con un único espacio de nombres, a medida que su proyecto aumenta en tamaño y complejidad, también aumenta la probabilidad de colisión de nombres.

Si está escribiendo código destinado a ser compartido o reutilizado, esto se vuelve aún más importante.

Acepto las solicitudes.La mayoría de las personas que utilizan múltiples niveles de espacios de nombres (en mi experiencia) provienen de un entorno de Java o .NET donde el ruido es significativamente menor.Encuentro que los buenos prefijos de clase pueden reemplazar múltiples niveles de espacios de nombres.

Pero he visto un buen uso de múltiples niveles de espacio de nombres en boost (y otras bibliotecas).Todo está en el espacio de nombres de impulso, pero a las bibliotecas se les permite (¿se les recomienda?) estar en su propio espacio de nombres.Por ejemplo: boost::this_thread espacio de nombres.Permite cosas como...

boost::this_thread::get_id()
boost::this_thread::interruption_requested()

"this_thread" es sólo un espacio de nombres para una colección de funciones gratuitas.Podrías hacer lo mismo con una clase y funciones estáticas (es decir,la forma Java de definir una función libre), pero ¿por qué hacer algo antinatural cuando el lenguaje tiene una forma natural de hacerlo?

Basta con mirar la biblioteca de clases base .Net para ver una jerarquía de espacios de nombres aprovechada.Tiene cuatro o cinco niveles de profundidad en algunos lugares, pero en su mayoría son solo dos o tres, y la organización es muy buena para encontrar cosas.

Cuanto mayor sea el código base, mayor será la necesidad de espacios de nombres jerárquicos.A medida que su proyecto se hace cada vez más grande, descubre que necesita dividirlo de manera que sea más fácil encontrar cosas.

Por ejemplo, actualmente utilizamos una jerarquía de 2 niveles.Sin embargo, ahora estamos hablando de dividir algunas de las porciones más grandes en 3 niveles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top