Я виявив, що ви можете сортувати простір імен 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();}
}
І це все ще трохи довго. але відчуває себе трохи ОО.
І чує, як це здається найкращим чином зробити
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());
ABC.Maths.Complex p = ABC.Maths.Conversion.ComplexFromPOINT2(new ABC.Maths.POINT2());
Maths.Complex p = Maths.Conversion.ComplexFromPOINT2(new Maths.POINT2());
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
а потім створити екземпляр PREC :: POINT2 для подвійної точності POINT2
З просторами імен c # або java це зробити непросто
очевидно, це лише один приклад. Подумайте, як читалося використання.
namespace tier1::tier2::tier3
.