Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Specializzazione Parziale Dei Template | Specializzazione Dei Template
Template C++

Specializzazione Parziale Dei Template

Scorri per mostrare il menu

La specializzazione di template per un template a singolo parametro è semplice, ma diventa più complessa con parametri multipli. In questi casi entra in gioco la specializzazione parziale dei template. Questa consente di creare una versione specializzata di un template per specifici sottoinsiemi di tipi o valori.

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; }

Sintassi della specializzazione parziale dei template

La specializzazione parziale dei template può essere considerata una forma di overloading dei template. Ecco le regole da seguire:

Nella specializzazione parziale, si definisce una nuova versione di una funzione template con alcuni dei suoi parametri fissati a tipi specifici, mentre altri rimangono generici. Il compilatore utilizza questa versione specializzata ogni volta che incontra tipi corrispondenti durante l'istanziazione del template.

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; }

Questa è una modalità di utilizzo della specializzazione dei template, ma esiste un altro scenario, più comune.

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

Che cos'è la specializzazione parziale dei template?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 4. Capitolo 3
some-alt