He encontrado que puedes ordenar el espacio de nombres C# de esta manera;
namespace ABC_Maths{
class POINT2{};
class Complex{};
}
namespace ABC_Maths_Conversion{
ABC_MATHS::Complex ComplexFromPOINT2(ABC_MATHS::POINT2)
{return new ABC_MATHS::Complex();}
ABC_MATHS::POINT4 POINT2FromComplex(ABC_MATHS::COMPLEX)
{return new ABC_MATHS::POINT2();}
}
namespace ABC
{
}
Pero el código no parece ser muy ordenado. Y esperaría a tener uso de largo aliento
Es mejor nido tanta funcionalidad en clases algo así como
namespace ABC{
class Maths{
public:
class POINT2{};
class Complex:POINT2{};
class Conversion{
public:
static Maths.Complex ComplexFromPOINT2(MATHS.POINT2 p)
{return new MATHS.Complex();}
static MATHS.POINT2 POINT2FromComplex(MATHS.COMPLEX p)
{return new ABC::MATHS.POINT2();}// Can reference via the namespace if needed
} /*end ABC namespace*/
Y eso es todavía un poco largo aliento. pero se siente un poco OO.
y oye cómo parece mejor hecho
namespace ABC
{
class POINT2{};
class Complex:POINT2{};
Complex ComplexFromPOINT2(POINT2 p){return new Complex();}
POINT2 POINT2FromComplex(Complex){return new POINT2();}
}
oye cómo se vería usos
int main()
{
ABC_Maths::Complex p = ABC_Maths_Conversion::ComplexFromPOINT2(new ABC_MATHS::POINT2());
// or THE CLASS WAY
ABC.Maths.Complex p = ABC.Maths.Conversion.ComplexFromPOINT2(new ABC.Maths.POINT2());
// or if in/using the ABC namespace
Maths.Complex p = Maths.Conversion.ComplexFromPOINT2(new Maths.POINT2());
// and in the final case
ABC::Complex p = ABC::ComplexFromPOINT2(new ABC::POINT2());
}
su sido interesante averiguar por qué nunca utilicé C++ espacios de nombres, como lo haría con C#. Sería demasiado largo, y nunca funcionaría de la misma manera que los espacios de nombres C#.
el mejor uso para los espacios de nombres en C++ es dejar de decir que mi función súper cout (que suena cada vez que se la llama) se confunde con la función std :: cout (que es mucho menos impresionante).
El hecho de que C# y C++ tengan espacios de nombres, no significa que el espacio de nombres signifique lo mismo. son diferentes pero similares. La idea de espacios de nombres C# debe provenir de espacios de nombres C++. alguien debe haber visto qué cosa similar pero diferente podría hacer, y no tenía suficiente poder de imaginación para darle su nombre original como "ClassPath", que tendría más sentido ya que es un camino hacia las clases en lugar de proporcionar nombrar espacios donde cada espacio puede tener los mismos nombres
espero que esto ayude a alguien
me olvidaba decir que todas estas formas son válidas, y el uso moderado de los dos primeros se pueden incorporar en el tercer a crear una biblioteca que tiene sentido decir (no gran ejemplo)
_INT::POINT2{}
y
_DOUBLE::POINT2{}
para que pueda cambiar el nivel de precisión mediante el uso de
#define PREC _DOUBLE
// or #define PREC _INT
y luego la creación de una instancia de PREC :: PUNTO2 de doble precisión PUNTO2
Eso no es una cosa fácil de hacer con C# o espacios de nombres de java
obviamente es solo un ejemplo.Piense en cómo se lee el uso.
Finalmente, C++ 17 permitirá 'namespace tier1 :: tier2 :: tier3'. –
El enlace en la actualización está roto ... – AlwaysLearning
Me interesó saber cómo abordó el problema e hice clic en su enlace. Por desgracia, como ya ha señalado AlwaysLearning, el enlace se rompió. – csj