Template metaprogramming techniques for concept-based specialization

  • Authors:
  • Bruno Bachelet;Antoine Mahul;Loïc Yon

  • Affiliations:
  • Clermont Université, Université Blaise Pascal, LIMOS, BP 10448, F-63000 Clermont-Ferrand, France and CNRS, UMR 6158, LIMOS, F-63171 Aubière, France;Clermont Université, Université Blaise Pascal, CRRI, F-63000 Clermont-Ferrand, France;Clermont Université, Université Blaise Pascal, LIMOS, BP 10448, F-63000 Clermont-Ferrand, France and CNRS, UMR 6158, LIMOS, F-63171 Aubière, France

  • Venue:
  • Scientific Programming
  • Year:
  • 2013

Quantified Score

Hi-index 0.00

Visualization

Abstract

In generic programming, software components are parameterized on types. When available, a static specialization mechanism allows selecting, for a given set of parameters, a more suitable version of a generic component than its primary version. The normal C++ template specialization mechanism is based on the type pattern of the parameters, which is not always the best way to guide the specialization process: type patterns are missing some information on types that could be relevant to define specializations.The notion of a concept, which represents a set of requirements including syntactic and semantic aspects for a type, is known to be an interesting approach to control template specialization. For many reasons, concepts were dropped from C++11 standard, this article therefore describes template metaprogramming techniques for declaring concepts, modeling relationships meaning that a type fulfills the requirements of a concept, and refinement relationships meaning that a concept refines the requirements of another concept.From a taxonomy of concepts and template specializations based on concepts, an automatic mechanism selects the most appropriate version of a generic component for a given instantiation. Our purely library-based solution is also open for retroactive extension: new concepts, relationships, and template specializations can be defined at any time; such additions will then be picked up by the specialization mechanism.