Comment écrire des wrappers pour les fonctions de la bibliothèque standard C
L'utilisation de l'espace de noms standard peut encombrer le code ; cependant, taper std:: avant chaque instance de cout, cerr, cin et endl peut être fastidieux. Cet article explore une solution possible et considère d'autres implications.
Wrapper proposé
Le code suivant propose une approche alternative utilisant des wrappers :
#include <iostream>
#include <string>
extern std::ostream& Cout;
extern std::ostream& Cerr;
extern std::istream& Cin;
extern std::string& Endl;
#include "STLWrapper.h"
std::ostream& Cout = std::cout;
std::ostream& Cerr = std::cerr;
std::istream& Cerr = std::cin;
std::string _EndlStr("\n");
std::string& Endl = _EndlStr;
Copier après la connexion
Cette approche fonctionne mais soulève quelques questions :
Potentiel Problèmes
-
Surcharge de l'espace de noms : L'utilisation de wrappers introduit la possibilité de collisions de noms avec des fonctions surchargées dans l'espace de noms global.
-
Observation involontaire des noms : L'utilisation de wrappers courts peut involontairement masquer des variables ou des fonctions dans le local portée.
-
Complexité accrue :La solution wrapper ajoute une couche supplémentaire de complexité à la base de code.
Perspectives alternatives
-
Évitez les déclarations d'espace de noms : Bien que les wrappers fournissent un solution de contournement, il est généralement recommandé d'éviter d'utiliser des déclarations d'espace de noms (en utilisant l'espace de noms std) et d'utiliser à la place des noms complets (std :: cout). Cela améliore la clarté du code et réduit le risque de problèmes de surcharge.
-
Considérez la lisibilité : La longueur des identifiants est un compromis entre le temps d'écriture et la lisibilité. Même si des identifiants plus courts peuvent faciliter l'écriture de code, des identifiants plus longs peuvent améliorer la lisibilité et la compréhension. Des études indiquent que l'utilisation de noms complets peut rendre le code plus facile à lire et à interpréter.
-
Exceptions : La fonction std::swap est une exception où l'utilisation de using peut être bénéfique, car elle vous permet pour utiliser swap(a, b) sans spécifier l'espace de noms.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!