lang:cpp:concept
Ceci est une ancienne révision du document !
Les concepts servent à forcer des classes à respecter certaines contraintes ou à définir des interfaces.
https://omnigoat.github.io/2020/01/19/cpp20-concepts/ Archive du 19/01/2020 le 05/02/2020
Définitions des concepts
- Contrainte sur un type :
template <typename T> concept integral = std::is_integral_v<T>;
- Contrainte sur les fonctions :
template <typename T> // Le type est cv. Donc, il faut utiliser deux paramètres, l'un pour const, l'autre sans. concept Shape = requires(const T t, T u) { // Le type de retour est faculatif mais conseillé. { t.area() } -> float; { u.mod() } -> float; // On impose une variable. Elle peut être static / constexpr ou non. { t.varr } -> float; };
Application des concepts
- Vérification qu'une structure respecte un concept
struct Rectangle { consteval float area() const {return 1.;} consteval float mod() {return 1.;} static constexpr float varr = 2.f; }; static_assert(Shape<Rectangle>);
- Forcer un template à respecter un concept
template <class T> requires Shape<T> class AllFormes { };
- Cast d'un type vers un concept
int main() { Rectangle a; Shape auto &b = a; b.mod(); }
lang/cpp/concept.1581336555.txt.gz · Dernière modification : 2020/02/10 13:09 de root