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

Introduzione alla Specializzazione dei Template

Scorri per mostrare il menu

Un template generico funziona con qualsiasi tipo di dato. Tuttavia, alcuni tipi potrebbero richiedere un trattamento speciale. Ad esempio, se si sta implementando una funzione che si comporta in modo diverso per i tipi int e std::string, la specializzazione dei template consente di definire una versione diversa del template per ciascun tipo.

main.cpp

main.cpp

123456789101112
#include <iostream> template<typename T> T square(T value) { return value * value; } int main() { std::cout << square<int>(25); std::cout << square<std::string>("5"); }

Se si esegue il codice sopra, si incontrerà un errore. Questo accade perché std::string non supporta l'operatore *. Pertanto, è necessario informare il compilatore su come gestire un std::string passato come parametro.

Come funzionano i template internamente

Per ora stai solo acquisendo le basi dei template, in particolare dei template di funzione. Hai imparato come crearli, utilizzare le liste di parametri e chiamare le funzioni con diversi tipi di dati. Potresti chiederti perché, in questo caso, non si sovraccaricano semplicemente le funzioni per tutti i tipi numerici disponibili in C++. Sebbene questo approccio possa funzionare per questo esempio, è importante ricordare che i template sono uno strumento molto più potente.

main.cpp

main.cpp

12345678910111213
#include <iostream> struct myStruct {}; class myClass {}; template<typename T> void TemplateFunction() { std::cout << typeid(T).name() << std::endl; } int main() { TemplateFunction<myClass>(); TemplateFunction<myStruct>(); }

I template possono accettare qualsiasi tipo di dato, inclusi i tipi definiti dall'utente. Al contrario, affidarsi esclusivamente al sovraccarico delle funzioni richiederebbe la creazione di una nuova funzione per ogni tipo, rendendo gli aggiornamenti complessi e soggetti a errori. Pertanto, non possiamo affidarci solo al sovraccarico delle funzioni e dobbiamo utilizzare le specializzazioni dei template per risolvere problemi come quelli presenti nella funzione template square.

question mark

Perché il template della funzione square nell'esempio genera un errore quando viene utilizzato std::string?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1

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 1
some-alt