Concepts in Templates und mit auto verwenden
Beschränken Sie Funktionstemplates und verkürzte Funktionstemplates mit Concepts.
Concepts in Templates und mit auto verwenden ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Zusammenfassung der drei Syntaxvarianten
Sie können ein Konzept auf drei Arten anwenden: als Präfix eines Templateparameters, als requires-Klausel oder mit der Syntax für abgekürzte Funktionstemplates.
Präfixsyntax
Ersetzen Sie typename durch den Namen des Konzepts.
template <std::integral T>
T add(T a, T b) { return a + b; }Syntax der requires-Klausel
Fügen Sie requires nach der Liste der Templateparameter ein. Am flexibelsten – unterstützt komplexe Bedingungen.
template <typename T>
requires std::integral<T> || std::floating_point<T>
T add(T a, T b) { return a + b; }Nachgestellte requires-Klausel
Platzieren Sie requires nach der Funktionssignatur – nützlich bei Memberfunktionen, wenn der Constraint von Parametern abhängt.
template <typename T>
class Container {
public:
void sort() requires std::sortable<T> { /* ... */ }
};Abgekürzte Funktionstemplates
Verwenden Sie auto für Parameter und versehen Sie es mit einem Constraint. Der Compiler erzeugt das Template intern.
void greet(std::convertible_to<std::string> auto name) {
std::cout << "Hello " << name;
}Mehrere auto-Parameter
Jedes auto kann ein eigenes Konzept haben. Jedes auto erzeugt einen unabhängigen Templateparameter.
auto multiply(std::integral auto a, std::integral auto b) {
return a * b;
}Konzepte mit Klassentemplates
Dieselben drei Syntaxvarianten gelten auch hier.
template <std::movable T>
class Buffer { /* ... */ };
template <typename T>
requires std::default_initializable<T>
class Storage { /* ... */ };Lambdas mit Constraints (C++20)
Lambdas können explizite Templateparameter mit Konzepten besitzen.
auto print = []<std::integral T>(T x) {
std::cout << x << " is integral";
};
print(42);Konzeptbasierte Überladungsauflösung
Der Compiler wählt die am stärksten eingeschränkte passende Überladung aus. Spezifischere Konzepte haben Vorrang vor weniger spezifischen.
void process(std::integral auto x) { std::cout << "int\n"; }
void process(std::signed_integral auto x) { std::cout << "signed\n"; }
process(42); // calls signed_integral versionMemberfunktionen mit Constraints
Member eines Klassentemplates können eigene Constraints besitzen.
template <typename T>
class Optional {
T value_;
public:
void clear() requires std::is_trivially_destructible_v<T> { /* fast */ }
void clear() { /* general */ }
};Standardinitialisierte Typen mit Constraints
Kombinieren Sie requires mit Standardwerten, um klare Templates zu schreiben, die ihre Absicht erkennen lassen.
Styleguide
Verwenden Sie die Präfixsyntax für den Regelfall. Wechseln Sie zu requires, wenn die Constraints komplex sind oder mehrere Typen betreffen. Verwenden Sie abgekürzte Funktionstemplates für kurze, fokussierte Funktionen.
Schnelltest
Wie lautet die Syntax für ein abgekürztes Funktionstemplate für „eine Funktion, die einen beliebigen ganzzahligen Wert annimmt“?
Zusammenfassung
Wenden Sie Konzepte als Präfixe, in requires-Klauseln oder in abgekürzten Funktionstemplates an. Die am stärksten eingeschränkte passende Überladung gewinnt. Verwenden Sie die klarste passende Syntax – Präfixe für einfache Fälle, requires für komplexe und abgekürzte Syntax für kurze.
Häufig gestellte Fragen
Ist die Lektion „Concepts in Templates und mit auto verwenden“ kostenlos?
Ja — der vollständige Text von „Concepts in Templates und mit auto verwenden“ 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 in Templates und mit auto verwenden“?
Beschränken Sie Funktionstemplates und verkürzte Funktionstemplates mit Concepts. 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 3 von 4.
Wie lange dauert die Lektion „Concepts in Templates und mit auto verwenden“?
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
- Warum Concepts statt SFINAE?
- Concepts mit requires definieren
- Concepts in Templates und mit auto verwenden
- Häufige Standard-Concepts: Integral und Ranges