Concepts definiëren met requires
Definieer aangepaste concepts met requires-expressies en constraints
Concepts definiëren met requires is een gratis C++ Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.
Het sleutelwoord concept
Declareer een concept met template <params> concept Name = expression; De expressie moet tijdens compilatie een Booleaanse waarde zijn.
template <typename T>
concept Integer = std::is_integral_v<T>;Typekenmerken combineren
Gebruik logische operatoren om typekenmerken tot een concept te combineren.
template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;De requires-expressie
Een expressievere vorm: geef de bewerkingen op die het type moet ondersteunen.
template <typename T>
concept Addable = requires(T a, T b) {
a + b;
};Samengestelde vereisten
In requires kun je het resultaattype en aanvullende voorwaarden opgeven.
template <typename T>
concept Number = requires(T a, T b) {
{ a + b } -> std::convertible_to<T>;
{ a * b } -> std::convertible_to<T>;
};Geneste vereisten
Voeg requires toe binnen een requires-expressie om benoemde concepten op te nemen.
template <typename T>
concept Sortable = requires(T t) {
{ t.begin() };
{ t.end() };
requires std::movable<typename T::value_type>;
};Typevereisten
Je kunt vereisen dat een type bepaalde geneste typen of aliasen heeft.
template <typename T>
concept HasValueType = requires {
typename T::value_type;
};Concepten gebruiken in sjablonen
Drie syntaxisvormen:
// 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;
}Concepten en auto-parameters
Ook verkorte functiesjablonen kunnen voorwaarden hebben.
void process(Integer auto x) { std::cout << x; }Meerdere voorwaarden
Combineer concepten met && en ||.
template <std::integral T, std::integral U>
requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }Naamgevingsconventies
De meeste code gebruikt CamelCase voor concepten. Sommige bibliotheken gebruiken kleine letters, net als de standaardbibliotheek. Kies één conventie en houd je eraan.
Concepten in klassesjablonen
Voorzie klassesjablonen op dezelfde manier van voorwaarden.
template <std::integral T>
class Counter { T value_; /* ... */ };Herbruikbare concepten
Definieer een bibliotheek met kleine concepten en combineer ze. Herbruikbare concepten maken sjablonen zelfdocumenterend en eenvoudig te onderhouden.
Korte controle
Welke syntaxis binnen een requires-expressie controleert of het resultaat van a + b kan worden geconverteerd naar T?
Samenvatting
Definieer concepten met concept Name = expression. Gebruik requires-expressies voor op bewerkingen gebaseerde voorwaarden met samengestelde, geneste en typevereisten. Combineer concepten met && en || om uitgebreide voorwaarden uit te drukken.
Leer C++ met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “Concepts definiëren met requires” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “Concepts definiëren met requires”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.
Wat leer ik in “Concepts definiëren met requires”?
Definieer aangepaste concepts met requires-expressies en constraints Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C++ Academy te beginnen?
Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Concepts definiëren met requires”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C++ Academy?
Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Waarom concepts in plaats van SFINAE
- Concepts definiëren met requires
- Concepts gebruiken in templates en auto
- Veelvoorkomende standaardconcepts: integral, ranges