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

Partielle Templatespezialisierung

Swipe um das Menü anzuzeigen

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

main.cpp

main.cpp

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

Partielle Templatespezialisierung kann als eine Form von Template-Überladung betrachtet werden. Hier sind die zu beachtenden Regeln:

Bei der partiellen Spezialisierung wird eine neue Version einer Template-Funktion definiert, bei der einige ihrer Parameter auf bestimmte Typen festgelegt sind, während andere generisch bleiben. Der Compiler verwendet diese spezialisierte Version immer dann, wenn während der Template-Instanziierung passende Typen auftreten.

main.cpp

main.cpp

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, Template-Spezialisierung zu verwenden, aber es gibt ein weiteres, häufigeres Szenario.

main.cpp

main.cpp

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); }
question mark

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

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 4. Kapitel 3
some-alt