Ich habe festgestellt, dass Sie den c # -Namensraum so nachahmen können.
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
{
}
Aber Code scheint nicht sehr ordentlich zu sein. und ich würde erwarten, langwierigen Gebrauch zu haben
Es ist besser, so viel Funktionalität wie möglich in Klassen zu verschachteln
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();}
}
Und das ist noch ein bisschen langwierig. fühlt sich aber ein bisschen OO an.
Und hört, wie es am besten gemacht scheint
namespace ABC
{
class POINT2{};
class Complex:POINT2{};
Complex ComplexFromPOINT2(POINT2 p){return new Complex();}
POINT2 POINT2FromComplex(Complex){return new POINT2();}
}
hört, wie Verwendungen aussehen würden
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());
}
Es war interessant herauszufinden, warum ich nie C ++ - Namespaces verwendet habe, wie ich es mit c # tun würde. Es wäre zu langwierig und würde niemals so funktionieren wie c # -Namensräume.
Die beste Verwendung für Namespaces in C ++ besteht darin, zu verhindern, dass meine Super-Cout-Funktion (die jedes Mal klingelt, wenn sie aufgerufen wird) mit der Funktion std :: cout verwechselt wird (was weitaus weniger beeindruckend ist).
Nur weil c # und c ++ Namespaces haben, bedeutet dies nicht, dass Namespace dasselbe bedeutet. Sie sind unterschiedlich, aber ähnlich. Die Idee für c # -Namensräume muss aus c ++ - Namespaces stammen. Jemand muss gesehen haben, was eine ähnliche, aber andere Sache tun könnte, und hatte nicht mehr genug Vorstellungskraft, um ihm seinen eigenen ursprünglichen Namen wie "ClassPath" zu geben, was eher sinnvoll wäre, als ein Weg zum Unterricht zu sein, als ihn bereitzustellen Benennen von Räumen, in denen jeder Raum den gleichen Namen haben kann
Ich hoffe das hilft jemandem
Ich habe vergessen zu sagen, dass all diese Möglichkeiten gültig sind und eine moderate Verwendung der ersten beiden in die dritte integriert werden kann, um eine Bibliothek zu erstellen, die Sinn macht, dh (kein gutes Beispiel)
_INT::POINT2{}
und
_DOUBLE::POINT2{}
So können Sie die Genauigkeitsstufe mithilfe von ändern
#define PREC _DOUBLE
und dann Erstellen einer Instanz von PREC :: POINT2 für POINT2 mit doppelter Genauigkeit
Mit C # - oder Java-Namespaces ist das nicht einfach
das ist natürlich nur ein beispiel. Überlegen Sie, wie die Verwendung gelesen wird.
namespace tier1::tier2::tier3.