Utilisation de la Composition d’Espace de Noms
Les meilleures pratiques en programmation suggèrent de séquestrer de nouvelles données oufonctionnalité dans un espace de noms unique au nom sain lorsqu’il est possible de le faire. Ceci est considéré comme un avantage par rapport au dumping de tout dans l’espace de noms global, car la recherche de noms peut être explicitement activée ou désactivée comme ci-dessus, les symboles sont systématiquement mutilés sans préfixes ou macros répétitifs, etc.
Par exemple, considérons un projet qui définit la plupart de ses classes dans namespace gtk
. Il est possible d’adapter namespace gtk
à namespace std
en utilisant une fonctionnalité C++ appelée composition namespace. C’est ce qui se passe si une déclaration d’utilisation est placée dans une définition d’espace: le (s) symbole (s) importé(s) est (sont) importé(s) dans le(s) espace(s) de noms actuellement actif(s). Par exemple:
namespace gtk{ using std::string; using std::tr1::array; class Window { ... };}
Dans cet exemple, std::string
est importé dans namespace gtk
. Le résultat est que l’utilisation de std::string
dans l’espace de noms gtk peut simplement utiliser string
, sans l’explicite qualification.As un bonus supplémentaire, std::string
n’est pas importé dans l’espace de noms global. De plus, une disposition plus élaborée peut être faite pour la rétrocompatibilité et la portabilité, dans laquelle les using
-déclarations peuvent être enveloppées dans des macros qui sont définies sur la base de tests autoconf sur « » ou c’est-à-dire using std::string;
(selon que le système alibstdc ++ dans std::
ou non). (idées de Ellewelly et Karl Nelson)