używanie kompozycji przestrzeni nazw
najlepsza praktyka w programowaniu sugeruje sekwestrowanie nowych danych lub funkcjonalność w sanely-nazwanej, unikalnej przestrzeni nazw, gdy jest to możliwe. Jest to uważane za przewagę nad wyrzucaniem wszystkiego w globalnej przestrzeni nazw, ponieważ wtedy wyszukiwanie nazw może być jawnie włączone lub jak wyżej, symbole są konsekwentnie zniekształcane bez powtarzających się prefiksów nazw lub makr itp.
na przykład rozważ projekt, który definiuje większość swoich klas w namespace gtk
. Możliwe jest dopasowanie namespace gtk
do namespace std
za pomocą funkcji C++zwanej kompozycją przestrzeni nazw. Tak się dzieje IFA używając-deklaracja jest umieszczana w przestrzeni-definicja: zaimportowany symbol(y) zostanie zaimportowany do aktualnie aktywnej przestrzeni(y) nazw. Na przykład:
namespace gtk{ using std::string; using std::tr1::array; class Window { ... };}
w tym przykładzie std::string
zostanie zaimportowany donamespace gtk
. Rezultatem jest to, że użyciestd::string
wewnątrz przestrzeni nazw GTK może po prostu użyć string
, bez wyraźnego qualification.As dodatkowy bonus,std::string
nie zostanie zaimportowany do globalnej przestrzeni nazw. Dodatkowo, bardziej rozbudowany układ może być wykonany dla kompatybilności wstecznej i przenośności, przy czym deklaracjeusing
mogą być zawinięte w makra, które są ustawione na podstawie autoconf-tests na „” lub np. using std::string;
(w zależności od tego, czy system ma libstdc++ w std::
, czy nie). (pomysły z llewelly ’ ego i Karla Nelsona)