Delvis Templatespecialisering
Stryg for at vise menuen
Templatespecialisering for en enkelt-parameter skabelon er ligetil, men det bliver mere komplekst med flere parametre. Her kommer delvis templatespecialisering ind i billedet. Det giver mulighed for at oprette en specialiseret version af en skabelon for specifikke undergrupper af typer eller værdier.
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; }
Syntaks for delvis templatespecialisering
Delvis templatespecialisering kan opfattes som en form for template-overload. Her er reglerne, der skal følges:
Ved delvis specialisering defineres en ny version af en skabelonfunktion, hvor nogle af dens parametre er fastsat til specifikke typer, mens andre forbliver generiske. Kompileren anvender denne specialiserede version, når den støder på matchende typer under skabeloninstansiering.
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; }
Dette er én måde at anvende skabelonspecialisering på, men der findes et andet og mere almindeligt scenarie.
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); }
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat