434 Stimmen

Wofür sind Inline-Namespaces gut?

C++11 erlaubt inline namespaces, deren alle Elemente auch automatisch im umgebenden namespace sind. Ich kann mir keinen nützlichen Verwendungszweck dafür vorstellen - kann mir bitte jemand ein kurzes, prägnantes Beispiel für eine Situation geben, in der ein inline namespace benötigt wird und wo es die idiomatischste Lösung ist?

(Außerdem ist für mich nicht klar, was passiert, wenn ein namespace in einer, aber nicht allen Deklarationen als inline deklariert wird, die sich möglicherweise in verschiedenen Dateien befinden. Ist das nicht nach Schwierigkeiten?)

6voto

Martin Ba Punkte 35131

Inline-Namensräume können auch dazu verwendet werden, feinere Zugriffsmöglichkeiten auf Funktionen/Bezeichnungen innerhalb von Namensräumen bereitzustellen.

Dies wird in std::literals verwendet. Die Namensräume literals in std sind alle Inline-Namensräume, so dass:

  • wenn Sie irgendwo using namespace std; verwenden, haben Sie auch Zugriff auf alle benutzerdefinierten Literale in std.
  • aber wenn Sie nur eine Gruppe von udl in Ihrem lokalen Code benötigen, können Sie auch using namespace std::literals::string_literals; verwenden und erhalten nur die in diesem Namensraum definierten udl-Symbole.

Dies scheint eine nützliche Technik für Symbole zu sein, auf die Sie unqualifiziert zugreifen möchten (udl, Operatoren, usw.), indem Sie sie einfach in einem Inline-Namensraum bündeln, damit Sie speziell auf nur diesen (Unter-)Namensraum anstelle des Namensraums der gesamten Bibliothek verweisen können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X