Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Partiell Templatespecialisering | Templatespecialisering
C++-Mallar

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

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

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

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

Vad är partiell templatespecialisering?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 4. Kapitel 3
some-alt