Verwenden der Namespace-Zusammensetzung
Best Practice in der Programmierung schlägt vor, neue Daten oder Funktionalität in einem vernünftig benannten, eindeutigen Namespace zu sequestrieren, wann immer dies möglich ist. Dies wird als Vorteil gegenüber dem Dumping von allem im globalen Namespace angesehen, da dann die Namenssuche explizit aktiviert oder deaktiviert werden kann wie oben, Symbole werden konsistent ohne wiederholte Namenspräfixe oder Makros usw. verzerrt.
Betrachten Sie beispielsweise ein Projekt, das die meisten seiner Klassen in namespace gtk
definiert. Es ist möglich, namespace gtk
an namespace std
anzupassen, indem ein C++-Feature namensnamespace composition . Dies geschieht, wenn eine using-Deklaration in eine Namespace-Definition eingefügt wird: Die importierten Symbole werden in die aktuell aktiven Namespaces importiert. Zum Beispiel:
namespace gtk{ using std::string; using std::tr1::array; class Window { ... };}
In diesem Beispiel wird std::string
innamespace gtk
importiert. Das Ergebnis ist, dass die Verwendung vonstd::string
innerhalb des Namespace gtk einfach string
ohne die explizite qualification.As ein zusätzlicher Bonus, std::string
wird nicht in den globalen Namespace importiert. Zusätzlich kann eine aufwändigere Anordnung für Abwärtskompatibilität und Portabilität getroffen werden, wobei dieusing
-Deklarationen in Makros verpackt werden können, die basierend auf Autoconf-Tests entweder auf „“ oder dh using std::string;
(abhängig davon, ob das System hatlibstdc++ in std::
oder nicht). (ideen von Bellewelly und Karl Nelson)