0Pricing
C++ Academy · Leçon

Définir des concepts avec requires

Définir des concepts personnalisés avec des expressions requires et des contraintes

Définir des concepts avec requires est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Le mot-clé concept

Déclarez un concept avec template <params> concept Name = expression; L’expression doit être un booléen évalué au moment de la compilation.

template <typename T>
concept Integer = std::is_integral_v<T>;

Combinaison des caractéristiques de type

Utilisez des opérateurs logiques pour combiner des caractéristiques en un concept.

template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;

L’expression de contrainte

Une forme plus expressive : énumérez les opérations que le type doit prendre en charge.

template <typename T>
concept Addable = requires(T a, T b) {
    a + b;
};

Contraintes composées

Dans requires, vous pouvez spécifier le type de résultat et des contraintes supplémentaires.

template <typename T>
concept Number = requires(T a, T b) {
    { a + b } -> std::convertible_to<T>;
    { a * b } -> std::convertible_to<T>;
};

Contraintes imbriquées

Ajoutez requires dans une expression requires pour introduire des concepts nommés.

template <typename T>
concept Sortable = requires(T t) {
    { t.begin() };
    { t.end() };
    requires std::movable<typename T::value_type>;
};

Contraintes de type

Vous pouvez exiger qu’un type possède certains types imbriqués ou alias.

template <typename T>
concept HasValueType = requires {
    typename T::value_type;
};

Utilisation des concepts dans les modèles

Trois syntaxes :

// 1. Replace typename
template <Integer T>
T increment(T x) { return x + 1; }

// 2. requires after template parameters
template <typename T>
    requires Integer<T>
T increment(T x) { return x + 1; }

// 3. requires after function signature
template <typename T>
T increment(T x) requires Integer<T> {
    return x + 1;
}

Concepts et paramètres automatiques

Les modèles de fonction abrégés peuvent également être contraints.

void process(Integer auto x) { std::cout << x; }

Contraintes multiples

Combinez les concepts avec && et ||.

template <std::integral T, std::integral U>
    requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }

Conventions de nommage

La plupart du code utilise CamelCase pour les concepts. Certaines bibliothèques utilisent les minuscules, comme la bibliothèque standard. Choisissez une convention et tenez-vous-y.

Concepts dans les modèles de classe

Contraignez les modèles de classe de la même manière.

template <std::integral T>
class Counter { T value_; /* ... */ };

Concepts réutilisables

Définissez une bibliothèque de petits concepts et composez-les. Les concepts réutilisables rendent les modèles explicites et faciles à maintenir.

Vérification rapide

Quelle syntaxe, à l’intérieur d’une expression requires, vérifie que le résultat de a + b est convertible en T ?

Récapitulatif

Définissez des concepts avec concept Name = expression. Utilisez les expressions requires pour les contraintes fondées sur des opérations, avec des contraintes composées, imbriquées et de type. Combinez les concepts avec && et || pour exprimer des contraintes riches.

Questions Fréquemment Posées

La leçon « Définir des concepts avec requires » est-elle gratuite ?

Oui — le texte complet de « Définir des concepts avec requires » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Définir des concepts avec requires » ?

Définir des concepts personnalisés avec des expressions requires et des contraintes Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Définir des concepts avec requires » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Pourquoi préférer les concepts à SFINAE
  2. Définir des concepts avec requires
  3. Utiliser les concepts dans les modèles et avec auto
  4. Concepts standard courants : integral et Ranges
← Retour à C++ Academy