C++ Academy · leksjon

Definere concepts med requires

Definer egendefinerte concepts ved hjelp av requires-uttrykk og begrensninger.

Leksjon 2 av 414 trinn

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.

Gratis å komme i gang

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

  1. Hvorfor concepts fremfor SFINAE
  2. Definere concepts med requires
  3. Bruk av concepts i maler og auto
  4. Vanlige standardconcepts: integral, Ranges
← Tilbake til C++ Academy