Definere concepts med requires
Definer egendefinerte concepts ved hjelp av requires-uttrykk og begrensninger.
Definere concepts med requires er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Nøkkelordet concept
Deklarer et konsept med template <params> concept Name = expression; Uttrykket må være en boolsk verdi som kan evalueres under kompilering.
template <typename T>
concept Integer = std::is_integral_v<T>;Kombinere typeegenskaper
Bruk logiske operatorer til å kombinere egenskaper til et konsept.
template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;requires-uttrykket
En mer uttrykksfull form: oppgi operasjonene som typen må støtte.
template <typename T>
concept Addable = requires(T a, T b) {
a + b;
};Sammensatte krav
Inne i requires kan De angi resultattypen og ytterligere begrensninger.
template <typename T>
concept Number = requires(T a, T b) {
{ a + b } -> std::convertible_to<T>;
{ a * b } -> std::convertible_to<T>;
};Nestede krav
Legg til requires inne i et requires-uttrykk for å ta inn navngitte konsepter.
template <typename T>
concept Sortable = requires(T t) {
{ t.begin() };
{ t.end() };
requires std::movable<typename T::value_type>;
};Typekrav
De kan kreve at en type har bestemte nestede typer eller aliaser.
template <typename T>
concept HasValueType = requires {
typename T::value_type;
};Bruke konsepter i maler
Tre syntakser:
// 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;
}Konsepter og auto-parametere
Forkortede funksjonsmaler kan også begrenses.
void process(Integer auto x) { std::cout << x; }Flere begrensninger
Kombiner konsepter med && og ||.
template <std::integral T, std::integral U>
requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }Navnekonvensjoner
Mesteparten av koden bruker CamelCase for konsepter. Noen biblioteker bruker bare små bokstaver, i tråd med standardbiblioteket. Velg én konvensjon, og hold Dem til den.
Konsepter i klassem aler
Begrens klassemaler på samme måte.
template <std::integral T>
class Counter { T value_; /* ... */ };Gjenbrukbare konsepter
Definer et bibliotek med små konsepter, og sett dem sammen. Gjenbrukbare konsepter gjør maler selvforklarende og enkle å vedlikeholde.
Kort kontroll
Hvilken syntaks inne i et requires-uttrykk kontrollerer at resultatet av a + b kan konverteres til T?
Oppsummering
Definer konsepter med concept Name = expression. Bruk requires-uttrykk for operasjonsbaserte begrensninger med sammensatte, nestede og typebaserte krav. Kombiner konsepter med && og || for å uttrykke omfattende begrensninger.
Lær deg C++ med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Definere concepts med requires» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Definere concepts med requires», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Definere concepts med requires»?
Definer egendefinerte concepts ved hjelp av requires-uttrykk og begrensninger. Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C++ Academy?
Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Definere concepts med requires»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?
Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Hvorfor concepts fremfor SFINAE
- Definere concepts med requires
- Bruk av concepts i maler og auto
- Vanlige standardconcepts: integral, Ranges