Je suis passé de C ++ à Java et C # et je pense que l'utilisation des espaces de noms / packages est bien meilleure ici (bien structurée). Ensuite, je suis revenu au C ++ et j'ai essayé d'utiliser les espaces de noms de la même manière, mais la syntaxe requise est horrible dans le fichier d'en-tête.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Ce qui suit me semble également étrange (pour éviter le retrait profond):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Existe-t-il un moyen plus court d'exprimer ce qui précède? Il me manque quelque chose comme
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Mettre à jour
Ok, certains disent que le concept d'utilisation en Java / C # et C ++ est différent. Vraiment? Je pense que le chargement de classe (dynamique) n'est pas le seul but des espaces de noms (c'est une perspective raisonnée très technique). Pourquoi ne pas l'utiliser pour une lisibilité et une structuration, par exemple pensez à "IntelliSense".
Actuellement, il n'y a pas de logique / colle entre un espace de noms et ce que vous pouvez y trouver. Java et C # font cela beaucoup mieux ... Pourquoi inclure <iostream>
et avoir un espace de noms std
? Ok, si vous dites que la logique doit reposer sur l'en-tête à inclure, pourquoi le #include n'utilise-t-il pas une syntaxe conviviale "IntelliSense" comme #include <std::io::stream>
ou<std/io/stream>
? Je pense que la structuration manquante dans les bibliothèques par défaut est une faiblesse de C ++ par rapport à Java / C #.
Si l'unicité des conflits avides est un point (qui est également un point de C # et Java), une bonne idée est d'utiliser le nom du projet ou le nom de l'entreprise comme espace de noms, ne pensez-vous pas?
D'une part, on dit que C ++ est le plus flexible ... mais tout le monde a dit "ne fais pas ça"? Il me semble que le C ++ peut faire beaucoup de choses mais a une syntaxe horrible même pour les choses les plus simples dans de nombreux cas par rapport au C #.
Mise à jour 2
La plupart des utilisateurs disent qu'il est absurde de créer une imbrication plus profonde que deux niveaux. Ok, alors qu'en est-il des espaces de noms Windows :: UI :: Xaml et Windows :: UI :: Xaml :: Controls :: Primitives dans le développement Win8? Je pense que l'utilisation des espaces de noms par Microsoft a du sens et qu'elle est en effet plus profonde que 2 niveaux. Je pense que les bibliothèques / projets plus importants ont besoin d'une imbrication plus profonde (je déteste les noms de classe comme ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... alors vous pouvez tout mettre dans l'espace de noms global aussi.)
Mise à jour 3 - Conclusion
La plupart disent "ne le faites pas", mais ... même le boost a une imbrication plus profonde qu'un ou deux niveaux. Oui, c'est une bibliothèque mais: Si vous voulez du code réutilisable - traitez votre propre code comme une bibliothèque que vous donneriez à quelqu'un d'autre. J'utilise également une imbrication plus profonde à des fins de découverte à l'aide d'espaces de noms.
namespace
mot-clé?