lang:cpp:concept
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lang:cpp:concept [2020/05/15 22:16] – Ajout de "Migration C++17 vers C++20" root | lang:cpp:concept [2021/11/13 09:04] (Version actuelle) – Ajout de "Restriction" "Fonction template" root | ||
---|---|---|---|
Ligne 17: | Ligne 17: | ||
template < | template < | ||
// Le type est cv. Donc, il faut utiliser deux paramètres, | // Le type est cv. Donc, il faut utiliser deux paramètres, | ||
- | concept Shape = requires(const T t, T u) | + | concept Shape = requires(const T t, T u, float f) |
{ | { | ||
- | // Le type de retour est faculatif | + | // Le type de retour est facultatif |
- | { t.area() } -> float; | + | { t.area() } -> std:: |
- | { u.mod() } -> float; | + | { u.mod(f) } -> std:: |
- | // On impose une variable. Elle peut être static / constexpr ou non. | + | // On impose une variable. |
- | { t.varr } -> float; | + | // Elle peut être static / constexpr ou non. |
+ | // Il faut la déclarer comme une référence. | ||
+ | { t.varr } -> std:: | ||
}; | }; | ||
</ | </ | ||
Ligne 33: | Ligne 35: | ||
{ | { | ||
consteval float area() const {return 1.;} | consteval float area() const {return 1.;} | ||
- | consteval float mod() {return | + | consteval float mod(float f) {return |
static constexpr float varr = 2.f; | static constexpr float varr = 2.f; | ||
}; | }; | ||
Ligne 60: | Ligne 62: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | * Déclaration d'une fonction dont un des paramètres doit respecter un concept | ||
+ | |||
+ | <code cpp> | ||
+ | void foo(const Concept auto&) | ||
+ | {} | ||
+ | </ | ||
+ | |||
+ | Et cela va générer un symbole pour chaque type. | ||
+ | |||
+ | ====Restriction==== | ||
+ | |||
+ | ===Fonction template=== | ||
+ | |||
+ | Il n'est pas possible de définir un concept avec un template non défini dans le concept. | ||
+ | |||
+ | Exemple: | ||
+ | |||
+ | <code cpp> | ||
+ | struct Goat { | ||
+ | template< | ||
+ | void eat(T); | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | Il n'est pas possible de laisser '' | ||
+ | |||
+ | [[https:// | ||
====Migration C++17 vers C++20==== | ====Migration C++17 vers C++20==== | ||
Ligne 122: | Ligne 152: | ||
<code cpp> | <code cpp> | ||
+ | #include < | ||
#include < | #include < | ||
lang/cpp/concept.1589573786.txt.gz · Dernière modification : 2020/05/15 22:16 de root