Я обнаружил, что вы можете имитировать пространство имен c # следующим образом;
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
{
}
Но код не очень аккуратный. и я ожидал бы, что будет долгое использование
Лучше вложить столько классов в классы, что-то вроде
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*/
И это все еще немного затянуто. но чувствует себя немного ОО.
И слышит, как это лучше всего сделать
namespace ABC
{
class POINT2{};
class Complex:POINT2{};
Complex ComplexFromPOINT2(POINT2 p){return new Complex();}
POINT2 POINT2FromComplex(Complex){return new POINT2();}
}
слышит, как выглядят обычаи
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());
}
Было интересно выяснить, почему я никогда не использовал пространства имен c ++, как я бы использовал с c #. Это будет слишком долго и никогда не будет работать так же, как пространства имен c #.
лучшее использование для пространств имен в c ++ - это запретить смешивать мою функцию super cout (которая звонит каждый раз при ее вызове) с функцией std :: cout (что гораздо менее впечатляет).
То, что у c # и c ++ есть пространства имен, не означает, что пространство имен означает одно и то же. они разные, но похожи. Идея для пространств имен c # должна исходить от пространств имен c ++. кто-то, должно быть, видел, что может сделать похожая, но другая вещь, и у него не хватило силы воображения, чтобы дать ему свое собственное оригинальное имя, такое как «ClassPath», что было бы более логично, поскольку это путь к классам, а не для имена пространств, где каждое пространство может иметь одинаковые имена
Надеюсь, это кому-нибудь поможет
Я забыл сказать, что все эти способы действительны, и умеренное использование первых двух может быть включено в третий для создания библиотеки, которая имеет смысл, т. Е. (Не очень хороший пример)
_INT::POINT2{}
и
_DOUBLE::POINT2{}
, чтобы вы могли изменить уровень точности с помощью
#define PREC _DOUBLE
// or #define PREC _INT
и затем создание экземпляра PREC :: POINT2 для двойной точности POINT2
Это нелегко сделать с пространствами имен c # или java
очевидно, это только один пример. Подумайте, как читается использование.