Was ist ein "Namespace-Alias" in C ++? Wie wird es benutzt?
c++
namespaces
Martin B.
quelle
quelle
Ganz einfach, das #define funktioniert nicht.
Kompiliert gut. Hiermit können Sie Kollisionen mit Namespace- und Klassennamen umgehen.
In der letzten Zeile ist "Hmm: Ups" ein Kompilierungsfehler. Der Vorprozessor ändert es in Nope :: Oops, aber Nope ist bereits ein Klassenname.
quelle
Mehr zu diesem Thema http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of-n
Es geht darum, einen Alias für einen langen Namespace-Namen auszuwählen, z.
namespace SHORT = NamespaceFirst::NameSpaceNested::Meow
Dann können Sie später typedef
typedef SHORT::mytype
anstatt
typedef NamespaceFirst::NameSpaceNested::Meow::mytype
Diese Syntax funktioniert nur für Namespaces, kann keine Klassen und Typen nach dem enthalten
namespace NAME =
quelle
Beachten Sie außerdem, dass Namespace-Aliase und die Verwendung von Anweisungen zur Kompilierungszeit und nicht zur Laufzeit aufgelöst werden. (Insbesondere werden beide Tools verwendet, um dem Compiler mitzuteilen, wo er beim Auflösen von Namen suchen soll, wenn er im aktuellen Bereich oder in einem seiner übergeordneten Bereiche kein bestimmtes Symbol finden kann.) Zum Beispiel wird keiner dieser Tools verwendet kompilieren:
Nun hat ein neugieriger Verstand vielleicht bemerkt, dass
constexpr
Variablen auch zur Kompilierungszeit verwendet werden, und sich gefragt, ob sie in Verbindung mit einem Alias oder einer Direktive verwendet werden können. Meines Wissens können sie das nicht, obwohl ich mich vielleicht irre. Wenn Sie mit gleichnamigen Variablen in verschiedenen Namespaces arbeiten und dynamisch zwischen ihnen wählen müssen, müssen Sie Referenzen oder Zeiger verwenden.Der Nutzen des Obigen mag begrenzt sein, sollte aber dem Zweck dienen.
(Ich entschuldige mich für Tippfehler, die ich oben möglicherweise übersehen habe.)
quelle
Der Namespace wird verwendet, um Namenskonflikte zu vermeiden.
Beispielsweise:
Sie haben jetzt zwei Klassen-Namensleisten, die dank des Namespaces völlig unterschiedlich und getrennt sind.
Der angezeigte "using namespace" dient dazu, dass Sie den Namespace nicht angeben müssen, um Klassen in diesem Namespace zu verwenden. dh std :: string wird string.
Meine Ressource: https://www.quora.com/What-is-namespace-in-C++-1
quelle