Utilizzo della composizione dello spazio dei nomi
Le migliori pratiche nella programmazione suggeriscono di sequestrare nuovi dati o funzionalità in uno spazio dei nomi univoco e con un nome sano quando possibile. Questo è considerato un vantaggio rispetto al dumping di tutto nello spazio dei nomi globale, poiché la ricerca del nome può essere abilitata esplicitamente o abilitata come sopra, i simboli sono costantemente storpiati senza prefissi o macro ripetitivi, ecc.
Ad esempio, si consideri un progetto che definisce la maggior parte delle sue classi in namespace gtk
. È possibile adattare namespace gtk
a namespace std
utilizzando una composizione C++-feature callednamespace. Questo è ciò che accade se una dichiarazione di utilizzo viene inserita in una definizione di spazio-spazio: i simboli importati vengono importati nello spazio dei nomi attualmente attivo. Ad esempio:
namespace gtk{ using std::string; using std::tr1::array; class Window { ... };}
In questo esempio, std::string
viene importato innamespace gtk
. Il risultato è che l’uso di std::string
all’interno dello spazio dei nomi gtk può semplicemente usare string
, senza l’esplicito qualification.As un ulteriore vantaggio,std::string
non viene importato nello spazio dei nomi globale. Inoltre, una disposizione più elaborata può essere fatta per la retrocompatibilità e la portabilità, per cui le dichiarazioni using
-possono essere racchiuse in macro impostate in base a autoconf-test su “” o cioè using std::string;
(a seconda che il sistema haslibstdc++ in std::
o meno). (idee Fromlewelly e Karl Nelson)