Alors, disons que j'ai quelques fonctions pour faire face à l'ouverture / fermeture des fichiers.
est-il préférable de faire une classe avec toute ces fonctions déclarées statiquement Ou simplement mettre la fonction "publique" dans le fichier d'en-tête du fichier de noms "fichier" et mettre les "détails de la mise en œuvre" du reste dans le fichier .cc. p>
ci-dessous sont les échantillons de code. P> C'est un peu long pour l'espace de noms, car je veux le rendre aussi clair que possible. p>
merci !! p>
La mise en œuvre de la classe p> Rubrique: P>
namespace file { enum Errorcode { FILE_CANNOT_OPEN, FILE_CANNOT_CLOSE }; void err(Errorcode e, std::string msg); void toLines(std::ifstream& ifs, common::Lines &lines); common::Lines toLines(std::string filename) { std::vector<std::string> lines; try { std::ifstream ifs(filename.c_str()); if (ifs.fail()) throw FILE_CANNOT_OPEN; toLines(ifs, lines); ifs.close(); if (ifs.fail()) throw FILE_CANNOT_CLOSE; } catch (Errorcode e) { err(e, filename); } return lines; } void err(Errorcode e, std::string msg) { switch (e) { default: std::cerr << "Unknown error.\n"; break; case FILE_CANNOT_OPEN: std::cerr << "file \"" << msg << "\" could not be opened.\n"; break; case FILE_CANNOT_CLOSE: std::cerr << "file \"" << msg << "\" could not be closed.\n"; break; } std::exit(-1); } void toLines(std::ifstream& ifs, common::Lines &lines) { std::string line; while(std::getline(ifs, line)) { lines.push_back(line); } ifs.clear(); // clear error bit set by getline() } }
3 Réponses :
Superficiellement, les fonctions de la classe statique et les fonctions espacées de noms sont presque identiques et, en effet, les classes ont été utilisées au début de la prise en charge des espaces de noms devenues généralisées. P>
De nos jours, vous devriez faire ce que la plupart expriment la structure logique (c'est-à-dire le modèle mental) de votre programme. Si vous regroupez des fonctions connexes, c'est un espace de noms. P>
Toutefois, les différences techniques en un mot sont que les espaces de noms participent à la recherche (ADL) dépendante de l'argument (ADL), tandis que les fonctions de membre de la classe ne le font pas, mais les classes peuvent être transformées en modèles et en spécialisés. Si l'une de ces différences sémantiques est importante pour vous, cette considération peut vous aider à faire le bon choix. P>
@Beyondsora: vous y allez: ADL - Koenig Recherche
Maintenant, je sais ce qu'est l'ADL. Je pense que dans mon cas, il est probablement préférable d'utiliser l'espace de noms au lieu de la classe. MERCI!!
Au fur et à mesure que OOP devient de plus en plus populaire, la classe est un meilleur choix lorsque vous développez un petit projet avec seulement 1 programmeur. Lorsque vous développez une application complexe, combiner classe et espace de noms est meilleur. P>
Cet article est spéculatif, subjectif, dans de grandes parties de la fiction, et le reste est une réflexion vocale.
Oui, les classes sont excellentes pour la programmation orientée objet car elles modélisent des objets. Mais la question dit spécifiquement qu'il possède un ensemble de fonctions connexes qui doivent simplement être encapsulées, non pas qu'ils modélisent un objet. Il demande si une classe statique ou un espace de noms est meilleur. Il n'y a rien de particulièrement sur une classe statique et, dans ce cas, l'utilisation d'un espace de noms est probablement une meilleure option. Je ne sais pas pourquoi cela compte s'il s'agit d'une application simple ou complexe; Le bon design est bon design, qu'il s'agisse d'un programmeur simple ou complexe, un programmeur ou mille.
Comment OOP est-il de plus en plus populaire? N'a-t-elle pas une popularité quelque peu plateautée au cours des 10 dernières années ou quelque chose et a même diminué avec l'adoption de caractéristiques fonctionnelles dans les langues traditionnelles?
Il y a une question simple qui couvre la plupart des situations em>: si vous en avez fait une classe, une instance de cette classe serait un sens et accomplirait quelque chose d'utile? P>
Si une instance est utile, vous voulez une classe. Sinon, un espace de noms est probablement un meilleur choix. P>
Dans mon cas, il n'y aurait pas de besoin du tout pour une instance. Donc, il semble que l'espace de noms est celui pour moi.
Toute place peut très bien fonctionner, mais les espaces de noms sont le style C ++ plus courant.