Je suis d'accord avec les autres - cela demande des affrontements de noms, des ambiguïtés et le fait est que c'est moins explicite. Bien que je puisse voir l'utilisation de using
, ma préférence personnelle est de la limiter. Je considérerais également fortement ce que certains ont souligné:
Si vous voulez trouver un nom de fonction qui pourrait être un nom assez courant, mais que vous voulez seulement le trouver dans l' std
espace de noms (ou l'inverse - vous voulez changer tous les appels qui ne sont pas dans l'espace de noms std
, l'espace de noms X
, ...), alors comment proposez-vous de faire cela?
Vous pourriez écrire un programme pour le faire, mais ne serait-il pas préférable de passer du temps à travailler sur votre projet lui-même plutôt que d'écrire un programme pour maintenir votre projet?
Personnellement, cela ne me dérange pas vraiment le std::
préfixe. J'aime le look plus que de ne pas l'avoir. Je ne sais pas si c'est parce que c'est explicite et me dit "ce n'est pas mon code ... j'utilise la bibliothèque standard" ou si c'est autre chose, mais je pense que c'est plus joli. Cela peut être étrange étant donné que je ne suis entré que récemment dans C ++ (utilisé et continue de faire du C et d'autres langages beaucoup plus longtemps et C est mon langage préféré de tous les temps, juste au-dessus de l'assemblage).
Il y a une autre chose bien qu'elle soit quelque peu liée à ce qui précède et à ce que d'autres soulignent. Bien que cela puisse être une mauvaise pratique, je réserve parfois std::name
la version et le nom de la bibliothèque standard pour une implémentation spécifique au programme. Oui, en effet, cela pourrait vous mordre et vous mordre fort, mais tout se résume à ce que j'ai commencé ce projet à partir de zéro, et je suis le seul programmeur pour cela. Exemple: je surcharge std::string
et l'appelle string
. J'ai des ajouts utiles. Je l'ai fait en partie à cause de ma tendance C et Unix (+ Linux) vers les noms en minuscules.
En plus de cela, vous pouvez avoir des alias d'espace de noms. Voici un exemple où il est utile qui pourrait ne pas avoir été mentionné. J'utilise la norme C ++ 11 et spécifiquement avec libstdc ++. Eh bien, il n'a pas de std::regex
support complet . Bien sûr, il compile, mais il lève une exception dans le sens où il s'agit d'une erreur de la part du programmeur. Mais c'est le manque de mise en œuvre.
Voici donc comment je l'ai résolu. Installez le regex de Boost et liez-le. Ensuite, je fais ce qui suit pour que lorsque libstdc ++ l'a complètement implémenté, je n'ai besoin que de supprimer ce bloc et le code reste le même:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
Je ne dirai pas si c'est une mauvaise idée ou non. Je dirai cependant qu'il le garde propre pour mon projet et en même temps le rend spécifique: Vrai, je dois utiliser Boost, mais je l'utilise comme le libstdc ++ l'aura finalement. Oui, démarrer votre propre projet et commencer par une norme (...) au tout début va très loin dans la maintenance, le développement et tout ce qui est impliqué dans le projet!
Juste pour clarifier quelque chose: je ne pense pas que ce soit une bonne idée d'utiliser délibérément et plus spécifiquement le nom d'une classe / quoi que ce soit dans la STL . La chaîne est l'exception (ignorez le premier, ci-dessus ou deuxième ici, jeu de mots si vous devez) pour moi car je n'aimais pas l'idée de «chaîne».
En l'état, je suis toujours très partisan de C et partisan de C ++. Des détails épargnés, une grande partie de ce sur quoi je travaille correspond plus à C (mais c'était un bon exercice et un bon moyen de me faire a. Apprendre une autre langue et b. Essayer de ne pas être moins biaisé contre les objets / classes / etc qui est peut-être mieux énoncé moins fermés, moins arrogants et plus acceptants.). Mais ce qui est utile, c'est ce que certains ont déjà suggéré: j'utilise effectivement list (c'est assez générique, n'est-ce pas?), Et trie (même chose) pour en nommer deux qui provoqueraient un conflit de nom si je le faisais using namespace std;
, et ainsi à cette fin, je préfère être spécifique, en contrôle et sachant que si je veux que ce soit l'utilisation standard, je devrai le préciser. En termes simples: aucune supposition autorisée.
Et quant à faire partie des regex de Boost std
. Je le fais pour une intégration future et - encore une fois, j'admets pleinement que c'est un parti pris - je ne pense pas que ce soit aussi moche que boost::regex:: ...
. En effet, c'est autre chose pour moi. Il y a beaucoup de choses en C ++ que je dois encore accepter pleinement dans les looks et les méthodes (un autre exemple: les modèles variadiques contre les arguments var [bien que j'admette que les modèles variadiques soient très très utiles!]). Même ceux que j'accepte, c'était difficile, et j'ai toujours des problèmes avec eux.