Partiell Templatespecialisering
Svep för att visa menyn
Templatespecialisering för en mall med en parameter är enkel, men det blir mer komplext med flera parametrar. Här kommer partiell templatespecialisering in i bilden. Det gör det möjligt att skapa en specialiserad version av en mall för specifika delmängder av typer eller värden.
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 för partiell templatespecialisering
Partiell templatespecialisering kan ses som en form av template-overloading. Här är reglerna att följa:
Vid partiell specialisering definierar du en ny version av en mallfunktion där vissa av dess parametrar är låsta till specifika typer medan andra förblir generiska. Kompilatorn använder denna specialiserade version när den stöter på matchande typer under mallinstansiering.
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; }
Detta är ett sätt att använda mall-specialisering, men det finns ett annat, mer vanligt scenario.
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); }
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal