I. Introduction▲
Le C++ a été l'un des premiers langages à offrir un support pour la programmation générique, grâce à l'introduction des templates. C'est ce qui a déterminé Alexander Stepanov, le père de la programmation générique, à écrire la standard template library (STL), qui constitue encore aujourd'hui l'essentiel de la bibliothèque standard du C++ et l'exemple le plus achevé de généricité.
Cet article n'a pas pour but de présenter la programmation générique. Pour ceux qui souhaiteraient s'initier ou approfondir la question, je conseille la lecture d'une interview d'Alexander Stepanov qui en présente les concepts et les perspectives. L'idée maîtresse est de ne pas programmer pour des types (int, float, MaClasse, MonInterface), mais pour des propriétés de type, ou concepts, afin de proposer des algorithmes et des conteneurs qui soient à la fois efficaces et généraux.
Le C++ est resté le refuge de la programmation générique quand la plupart des langages des années 1990-2000 ont choisi de rester dans les frontières de l'orienté objet. Des programmeurs de génie, comme Andrei Alexandrescu, ont repoussé les limites de ce qui paraissait possible avec la syntaxe du langage : les techniques qu'ils employaient étaient cependant si pointues qu'elles étaient de fait réservées à une petite minorité de programmeurs. Les Typelists dont Alexei Alexandrescu explique l'implémentation dans Modern C++ design sont ainsi les ancêtres des templates variadiques.
Le nouveau standard du C++ (C++11/14) a cherché à améliorer encore le support du langage pour la généricité, afin de rendre l'accès à certaines possibilités beaucoup plus large. Les templates variadiques font partie de ces nouveautés. Cet article cherche à les présenter en profondeur, de leur syntaxe à des utilisations avancées.