C++ Academy · Lektion

Definition af concepts med requires

Definér brugerdefinerede concepts med requires-udtryk og begrænsninger

Lektion 2 af 414 trin

Definition af concepts med requires er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Nøgleordet concept

Deklarér et concept med template <params> concept Name = expression; Udtrykket skal være en boolesk værdi, der kan beregnes ved kompilering.

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

Kombination af typeegenskaber

Brug logiske operatorer til at kombinere typeegenskaber til et koncept.

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

requires-udtryk

En mere udtryksfuld form: angiv de operationer, som typen skal understøtte.

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

Sammensatte krav

I requires kan du angive resultattypen og yderligere begrænsninger.

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

Indlejrede krav

Tilføj requires i et requires-udtryk for at inddrage navngivne koncepter.

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

Typekrav

Du kan kræve, at en type har bestemte indlejrede typer eller aliaser.

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

Brug af koncepter i skabeloner

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;
}

Koncepter og auto-parametre

Forkortede funktionsskabeloner kan også begrænses.

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

Flere begrænsninger

Kombiner koncepter med && og ||.

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

Navngivningskonventioner

Det meste kode bruger CamelCase til koncepter. Nogle biblioteker bruger små bogstaver, så navngivningen matcher standardbiblioteket. Vælg en konvention, og hold fast i den.

Koncepter i klasseskabeloner

Begræns klasseskabeloner på samme måde.

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

Genanvendelige koncepter

Definer et bibliotek med små koncepter, og komponer dem. Genanvendelige koncepter gør skabeloner selvforklarende og nemme at vedligeholde.

Hurtigt tjek

Hvilken syntaks i et requires-udtryk kontrollerer, at resultatet af a + b kan konverteres til T?

Opsummering

Definer koncepter med concept Name = expression. Brug requires-udtryk til operationsbaserede begrænsninger med sammensatte, indlejrede og typekrav. Kombiner koncepter med && og || for at udtrykke avancerede begrænsninger.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Definition af concepts med requires” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Definition af concepts med requires”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Definition af concepts med requires”?

Definér brugerdefinerede concepts med requires-udtryk og begrænsninger Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Definition af concepts med requires”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvorfor concepts frem for SFINAE
  2. Definition af concepts med requires
  3. Brug af concepts i skabeloner og auto
  4. Almindelige standard-concepts: integral, ranges
← Tilbage til C++ Academy