Je fais de la programmation en milieu universitaire en ce moment, donc je peux utiliser ce que je veux. J'utilise la bibliothèque de graphiques boost pour quelques choses, et je me demande si investir des efforts pour comprendre le GP plus profondément en vaut la peine.
Je suis curieux - la programmation générique (GP) est-elle beaucoup utilisée dans l'industrie? Je suppose que la plupart des programmeurs sont beaucoup plus à l'aise avec la POO ou utilisent des langages qui ne mettent pas l'accent ou ne prennent pas en charge GP, de sorte qu'en dehors d'appeler des structures / fonctions de données STL en C ++, j'ai l'impression que GP n'est pas utilisé très fréquemment en pratique. Mais, étant en dehors de l'industrie en ce moment, ce serait bien d'entendre des pratiquants à ce sujet.
(Au moment où j'écris ceci, je vois que la programmation générique n'est même pas une balise valide!)
Réponses:
Cela dépend vraiment largement du contexte de l'équipe et du projet.
Par exemple, dans les jeux vidéo, le code est souvent le "plus simple" possible (et même parfois trop simple) mais dans les grandes architectures. C'est parce que les développeurs de jeux ont beaucoup de problèmes à résoudre et ne veulent pas s'embêter avec la méta-programmation (c'est un langage séparé très abstrait et difficile à saisir en C ++).
Dans le même temps, l'utilisation de base des modèles est courante même dans ces boutiques et vous pouvez voir des optimisations basées sur des modèles dans certaines fonctions très spécifiques de certains moteurs.
Mais dans le développement de jeux, la plupart des gens éviteront tout métaprogrammation.
Maintenant, d'un autre côté extrême, certaines applications de traitement vraiment complexes ou lourdes, qui ne sont pas courantes, nécessitent une sorte de métaprogrammation lourde en raison d'exigences de performances et de flexibilité (au moment de la compilation) qui ne sont pas courantes. Je travaille dans un en ce moment.
Ce n'est pas courant, mais il existe et certains domaines de niche (dans certains contextes scientifiques ou embarqués) exigent que les gens en connaissent beaucoup sur la métaprogrammation ou souhaitent apprendre.
Au milieu, la plupart des gens utiliseront simplement la méta-proggramme comme "client", pas comme "concepteur". La plupart du code de méta-programmation sont regroupés dans des bibliothèques car les bibliothèques sont des outils pour le code et quoi de mieux qu'une bibliothèque qui peut s'adapter aux types personnalisés avec lesquels vous avez travaillé jusqu'à présent?
Boost (http://boost.org) est un ensemble de bibliothèques, certaines étant faites de métaprogrammation de magie noire lourde, et sont utilisées dans de nombreux magasins C ++ sous le nom de "STL ++", une extension de la STL (et elle l'est). Toutes les boutiques ne l'utilisent pas pour plusieurs raisons, comme la compatibilité du compilateur (certaines bibliothèques de boost peuvent faire pardonner à votre compilateur chaque fois qu'il vous fait du mal ...) et plus souvent parce que certains développeurs n'aiment pas ne pas pouvoir comprendre comment fonctionne un outil à l'intérieur (essayez de comprendre Boost.Spirit ...)
Quelles que soient les entreprises pour lesquelles vous travaillerez, certaines utiliseront ce paradigme, d'autres moins ou pas du tout ou même les interdiront.
Il n'y a pas de consensus car personne n'a les mêmes besoins, le même contexte ou la même équipe.
Mais encore, évidemment, il est utilisé. Peut-être demandez-vous qui utilise boost sur leur liste de diffusion pour avoir plus d'exemples concrets?
la source
La programmation générique, académiquement appelée polymorphisme paramétrique , est très souvent utilisée dans les domaines. Dans mon entreprise, nous l'utilisons principalement pour créer des éditeurs indépendants de types de données, quel que soit leur type. Vous n'en avez tout simplement pas besoin aussi souvent que d'autres fonctionnalités, mais c'est certainement une fonctionnalité que je ne voudrais pas manquer. Vous l'utilisez lorsqu'un comportement correspond à un grand nombre de types. C'est un signe clair que vous avez besoin de génériques lorsque vous vous retrouvez à écrire plusieurs fois le même code pour différents types.
Au moins d'après mon expérience, votre point de vue est faux. La programmation orientée objet et la programmation générique ne s'excluent pas mutuellement. En fait, vous devez utiliser les effets de synergie de leur combinaison. Comme je l'ai déjà dit, la raison pour laquelle vous ne la voyez pas apparaître aussi souvent que les autres techniques est que vous n'en avez pas besoin si souvent. Mais c'est une fonctionnalité puissante à avoir et vous aide grandement à garder votre code SEC . Quelles langues ne mettent pas vraiment l'accent sur le support du GP dans la programmation de haut niveau? 3 des 5 langues du Tiobe Top 5 prennent en charge les génériques / modèles. Et PHP est typé dynamiquement donc il n'en a pas vraiment besoin. Et alors?
la source
Les modèles C ++ sont largement utilisés pour des choses différentes des conteneurs - du moins dans mon domaine problématique (finance quantitative). J'irais même jusqu'à dire qu'il est parfois utilisé trop souvent, à des fins où de simples vieilles fonctions virtuelles seraient suffisantes (et n'augmenteraient pas tellement le temps de compilation).
Les gens l'utilisent pour éviter la duplication de code et pour obtenir un polymorphisme au moment de la compilation (sans répartition virtuelle).
la source