Est-ce une erreur d’utiliser C ++ ‘using’ keyword dans un fichier d’en-tête?

On m’a dit que c’était mauvais d’avoir “using namespace ns123” dans un fichier d’en-tête, mais je ne me souviens plus de la raison donnée. Est-ce vraiment une mauvaise chose à faire et pourquoi?

C’est une mauvaise pratique, en général, car cela va à l’encontre de l’objective des espaces de noms. En définissant dans un en-tête, vous n’imposez pas un contrôle ssortingct sur la scope de la déclaration using, ce qui signifie que vous pouvez vous heurter à des conflits de noms dans des endroits inattendus.

Si vous placez une déclaration using dans un fichier d’en-tête, l’espace de nom importé est également importé dans tout fichier contenant #include s, qu’ils le veuillent ou non. Cela viole le principe de la moindre surprise et annule l’objective des espaces de noms en permettant de modifier une instruction #include afin de provoquer facilement une collision de dénomination. Si vous souhaitez importer un espace de noms dans votre propre fichier .cpp pour économiser un peu de frappe et produire un code plus lisible, c’est très bien. Il suffit de ne pas forcer les utilisateurs de votre module à faire de même.

Extraire toutes les classes et fonctions de leur espace de noms est généralement une mauvaise idée et s’oppose en fait au concept d’avoir des espaces de noms … Il est généralement préférable d’utiliser “utiliser” sur une classe ou fonction spécifique.

Cela vous donnera souvent des erreurs de compilation étranges et mystérieuses, par exemple, où vous pouvez passer des heures à essayer de comprendre la racine du problème.

Programmation C ++ ordinaire

Oui, il y a souvent des endroits où cela a du sens, et vous avez le contrôle sur où et comment vous utilisez vos étamine. S’il s’agit d’un programme de scope limitée, vous n’avez pas à vous soucier de placer les utilisations dans une scope globale.

Pour les applications monolithiques, il est vivement recommandé de ne pas placer les utilisations dans un espace de noms très occupé, car les collisions vous rendront fou une fois que vous êtes engagé. Par exemple:

  1. ::
  2. ::Nom de la compagnie
  3. :: nom de l’entreprise :: composant
  4. :: nom de l’entreprise :: composant :: sous-composant.

Je dirais qu’il est parfaitement acceptable de commencer par utiliser des énoncés de niveau 3 ou 4, c’est-à-dire où les risques de collision commencent à devenir très faibles.

Programmation générique / TMP

Dans la programmation générique, l’utilisation de TMP est souvent utilisée pour configurer vos bibliothèques pour un domaine spécifique, souvent à l’aide d’instructions.