Funktions- und Klassentemplates aufgefrischt
Schreiben Sie generische Funktionen und Klassen mit der korrekten Templatesyntax.
Funktions- und Klassentemplates aufgefrischt ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Warum Templates?
Mit Templates schreiben Sie Code einmal und lassen den Compiler spezifische Versionen für jeden verwendeten Typ erzeugen. Sie sind eine Grundlage der generischen Programmierung.
Syntax von Funktionstemplates
Deklarieren Sie Typparameter mit template <typename T>. Verwenden Sie T in der Funktionssignatur.
template <typename T>
T max_of(T a, T b) {
return (a > b) ? a : b;
}
std::cout << max_of(3, 7); // int
std::cout << max_of(2.5, 1.5); // doubletypename vs class
Die Schlüsselwörter typename und class sind in Deklarationen von Templateparametern austauschbar. typename ist im modernen Stil gebräuchlicher.
Mehrere Typparameter
Templates können mehrere Typparameter haben.
template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
return a + b;
}Nicht-Typ-Parameter
Templateparameter können auch Werte ohne Typ sein, zum Beispiel Ganzzahlen, Enumerationen oder Zeiger.
template <typename T, size_t N>
struct StaticArray {
T data[N];
};
StaticArray<int, 10> arr;Klassentemplates
Generische Klassen verwenden dieselbe Templatesyntax. Verwenden Sie den Typparameter für Member und Methoden.
template <typename T>
class Stack {
std::vector<T> data_;
public:
void push(T x) { data_.push_back(std::move(x)); }
T pop() { T t = std::move(data_.back()); data_.pop_back(); return t; }
};
Stack<int> s1;
Stack<std::string> s2;Memberfunktionen außerhalb der Klasse
Definitionen außerhalb der Klasse benötigen bei jedem Member das Template-Präfix.
template <typename T>
class Stack {
public:
void push(T x);
};
template <typename T>
void Stack<T>::push(T x) {
data_.push_back(std::move(x));
}Standardargumente für Templates
Ähnlich wie Standardargumente von Funktionen. Sie werden verwendet, wenn der Aufrufer keinen Wert angibt.
template <typename T = int>
class Box {
T value;
};
Box<> b; // T is intAbleitung von Templateargumenten
Der Compiler leitet Templateargumente häufig aus dem Aufruf her.
template <typename T>
void print(T x) { std::cout << x; }
print(42); // T deduced as int
print("hello"); // T deduced as const char*
print<double>(3); // explicitAbleitung von Klassen-Templateargumenten (C++17)
Mit C++17 können Sie Klassen-Templateargumente weglassen, wenn sie aus dem Konstruktor abgeleitet werden können.
std::pair p(1, 2.5); // pair<int, double>
std::vector v{1, 2, 3}; // vector<int>Zweiphasige Namenssuche
Bei Templates erfolgt die Namenssuche in zwei Phasen – bei der Definition (nicht abhängige Namen) und bei der Instanziierung (abhängige Namen). Dadurch werden viele Fehler bereits bei der Definition erkannt.
Fehlermeldungen
Templatefehler können einschüchternd wirken. Lesen Sie die Meldung von unten nach oben, konzentrieren Sie sich auf die Quellposition und verwenden Sie C++20-Konzepte, um die Diagnose zu verbessern.
Schnelltest
Welche Funktion ermöglicht es, dass std::vector v{1, 2, 3}; ohne die Angabe von std::vector<int> kompiliert wird?
Zusammenfassung
Templates erzeugen zur Compile-Zeit typspezifischen Code. Definieren Sie Funktions- und Klassentemplates mit template <typename T>. Der Compiler leitet Argumente ab, wenn dies möglich ist – geben Sie sie bei Bedarf explizit an.
Häufig gestellte Fragen
Ist die Lektion „Funktions- und Klassentemplates aufgefrischt“ kostenlos?
Ja — der vollständige Text von „Funktions- und Klassentemplates aufgefrischt“ 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 „Funktions- und Klassentemplates aufgefrischt“?
Schreiben Sie generische Funktionen und Klassen mit der korrekten Templatesyntax. 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 1 von 4.
Wie lange dauert die Lektion „Funktions- und Klassentemplates aufgefrischt“?
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
- Funktions- und Klassentemplates aufgefrischt
- Templatespezialisierung: partiell und vollständig
- Variadische Templates und Parameter-Packs
- constexpr-Funktionen und if constexpr