En programmation générique, les composants logiciels sont paramétrés sur des types. Quand il est disponible, un mécanisme de spécialisation statique permet de sélectionner, pour un jeu de paramètres donné, une version plus adaptée d'un composant générique que sa version initiale. Le mécanisme normal de spécialisation de patron du C++ repose sur le motif de type des paramètres, ce qui n'est pas toujours la meilleure manière de guider le processus de spécialisation: les motifs de type manquent certaines informations sur les types qui pourraient être pertinentes pour définir des spécialisations. La notion de "concept", qui représente un ensemble de spécifications (incluant des aspects syntaxiques et sémantiques) pour un type, est reconnue pour être une approche intéressante pour contrôler la spécialisation de patron. Pour diverses raisons, les concepts ont été abandonnés dans le standard C++11, ce rapport décrit donc des techniques de métaprogrammation par patrons pour déclarer des concepts, des relations de "modélisation" (signifiant qu'un type satisfait les spécifications d'un concept) et des relations de "raffinement" (signifiant qu'un concept raffine les spécifications d'un autre concept). A partir d'une taxonomie de concepts et de spécialisations de patrons basées sur les concepts, un mécanisme automatique sélectionne la version la plus appropriée d'un composant générique pour une instanciation donnée. Notre solution, qui repose uniquement sur une bibliothèque, permet aussi une extension rétroactive: de nouveaux concepts, relations et spécialisations de patrons peuvent être définis à tout moment; de tels ajouts seront alors pris en compte par le mécanisme de spécialisation. La , qui signifie "Concepts for Template Specialization in C++", implémente la solution présentée dans ce rapport. |