C++ Academy · Lektion

Concepts mit requires definieren

Definieren Sie eigene Concepts mit requires-Ausdrücken und Constraints.

Lektion 2 von 414 Schritte

Concepts mit requires definieren ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Schlüsselwort concept

Sie deklarieren ein Konzept mit template <params> concept Name = expression; Der Ausdruck muss ein boolescher Wert zur Compile-Zeit sein.

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

Type Traits kombinieren

Verwenden Sie logische Operatoren, um Type Traits zu einem Konzept zu kombinieren.

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

Der requires-Ausdruck

Eine ausdrucksstärkere Form: Listen Sie die Operationen auf, die der Typ unterstützen muss.

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

Zusammengesetzte Anforderungen

Innerhalb von requires können Sie den Ergebnistyp und zusätzliche Constraints angeben.

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

Verschachtelte Anforderungen

Fügen Sie ein requires innerhalb eines requires-Ausdrucks ein, um benannte Konzepte einzubinden.

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

Typanforderungen

Sie können verlangen, dass ein Typ bestimmte verschachtelte Typen oder Aliase besitzt.

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

Konzepte in Templates verwenden

Drei Syntaxvarianten:

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

Konzepte und auto-Parameter

Auch abgekürzte Funktionstemplates können mit Constraints versehen werden.

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

Mehrere Constraints

Kombinieren Sie Konzepte mit && und ||.

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

Namenskonventionen

In den meisten Codebasen wird für Konzepte CamelCase verwendet. Einige Bibliotheken verwenden Kleinbuchstaben (wie die Standardbibliothek). Wählen Sie eine Konvention und bleiben Sie dabei.

Konzepte in Klassentemplates

Versehen Sie Klassentemplates auf dieselbe Weise mit Constraints.

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

Wiederverwendbare Konzepte

Definieren Sie eine Bibliothek kleiner Konzepte und kombinieren Sie sie. Wiederverwendbare Konzepte machen Templates selbstdokumentierend und leicht zu warten.

Schnelltest

Welche Syntax innerhalb eines requires-Ausdrucks prüft, ob das Ergebnis von a + b in T konvertierbar ist?

Zusammenfassung

Definieren Sie Konzepte mit concept Name = expression. Verwenden Sie requires-Ausdrücke für operationsbasierte Constraints mit zusammengesetzten, verschachtelten und Typanforderungen. Kombinieren Sie Konzepte mit && und ||, um komplexe Constraints auszudrücken.

Kostenlos starten

Lerne C++ mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
51
Lektionen
203

Häufig gestellte Fragen

Ist die Lektion „Concepts mit requires definieren“ kostenlos?

Ja — der vollständige Text von „Concepts mit requires definieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Concepts mit requires definieren“?

Definieren Sie eigene Concepts mit requires-Ausdrücken und Constraints. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Concepts mit requires definieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum Concepts statt SFINAE?
  2. Concepts mit requires definieren
  3. Concepts in Templates und mit auto verwenden
  4. Häufige Standard-Concepts: Integral und Ranges
← Zurück zu C++ Academy