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
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
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
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); }
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen