Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Partielle Vorlagenspezialisierung | Templatespezialisierung
C++-Vorlagen
course content

Kursinhalt

C++-Vorlagen

C++-Vorlagen

1. Erstellen der Ersten Vorlage
2. Verwendung von Templates
3. Klassenvorlagen
4. Templatespezialisierung

book
Partielle Vorlagenspezialisierung

Die Spezialisierung von Templates für ein einzelnes Parameter-Template ist unkompliziert, wird jedoch bei mehreren Parametern komplexer. Hier kommt die partielle Templatespezialisierung ins Spiel. Sie ermöglicht es Ihnen, eine spezialisierte Version eines Templates für spezifische Teilmengen von Typen oder Werten zu erstellen.

cpp

main

copy
12345678
// What if `T1` and `T2` are the same type? // Or what if you want to define special behavior when `T1` is a `std::string`? template<typename T1, typename T2> void TemplateExample(T1 first, T2 second) { std::cout << "Generic template!" << std::endl; }

Syntax der partiellen Templatespezialisierung

Sie können die partielle Templatespezialisierung als eine Form der Template-Überladung betrachten. Hier sind die zu befolgenden Regeln:

Bei der partiellen Spezialisierung definieren Sie eine neue Version einer Template-Funktion, bei der einige ihrer Parameter auf bestimmte Typen festgelegt sind, während andere generisch bleiben. Der Compiler verwendet diese spezialisierte Version, wann immer er während der Template-Instanziierung auf passende Typen trifft.

cpp

main

copy
123456789101112131415
#include <iostream> // Primary template template<typename T1, typename T2> bool IsSameType(T1 first, T2 second) { return false; } // Partial specialization for when both types are the same template<typename T> bool IsSameType(T first, T second) { return true; } int main() { std::cout << IsSameType(10, 'a') << std::endl; std::cout << IsSameType("Hello", "World") << std::endl; }

Das ist eine Möglichkeit, die Templatespezialisierung zu verwenden, aber es gibt ein anderes, häufigeres Szenario.

cpp

main

copy
123456789101112131415
#include <iostream> // Primary template template <typename T1, typename T2> // General case void Template(T1 a, T2 b) { std::cout << "General" << std::endl; } // Partial specialization for when `T1` is `bool` template <typename T2> // Special case when the first type is `bool` void Template(bool a, T2 b) { std::cout << "Special" << std::endl; } int main() { Template(false, 25); Template(100, 300); }
Was ist partielle Templatespezialisierung?

Was ist partielle Templatespezialisierung?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 3
We're sorry to hear that something went wrong. What happened?
some-alt