ITA - Appunti Cpp 015 - Templates
September 2024 (513 Words, 3 Minutes)
I template sono una funzionalità che consente di scrivere codice generico, codice che può funzionare con tipi diversi senza dover essere riscritto per ciascun tipo. In pratica, i template permettono di definire funzioni, classi, e alias che possono operare su qualsiasi tipo di dato, rendendo il codice più flessibile e riutilizzabile.
NB: un trm
Esempi per i Templates
Template di Funzione
Un template di funzione consente di scrivere una funzione che può operare su diversi tipi di dati senza dover specificare il tipo esatto:
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
int main() {
int x = 10, y = 20;
double a = 10.5, b = 7.5;
std::cout << max(x, y) << std::endl; // Output: 20
std::cout << max(a, b) << std::endl; // Output: 10.5
return 0;
}
Template di Classe
I template di classe funzionano in modo simile ai template di funzione, ma consentono di creare classi generiche che possono operare su diversi tipi di dati.
template <typename T>
class Box {
private:
T value;
public:
Box(T val) : value(val) {}
T getValue() {
return value;
}
};
int main() {
Box<int> intBox(10);
Box<double> doubleBox(15.5);
std::cout << intBox.getValue() << std::endl; // Output: 10
std::cout << doubleBox.getValue() << std::endl; // Output: 15.5
return 0;
}
Template con Parametri Multipli
I template possono anche avere più parametri di tipo:
template <typename T, typename U>
class Pair {
public:
T first;
U second;
Pair(T f, U s) : first(f), second(s) {}
};
int main() {
Pair<int, double> p(10, 15.5);
std::cout << "First: " << p.first << ", Second: " << p.second << std::endl;
return 0;
}
Specializzazione di Template
A volte, può essere necessario fornire una specifica implementazione per un determinato tipo. Questo è possibile tramite la specializzazione dei template.
template <>
class Box<char> {
private:
char value;
public:
Box(char val) : value(val) {}
char getValue() {
return std::toupper(value);
}
};
int main() {
Box<char> charBox('a');
std::cout << charBox.getValue() << std::endl; // Output: A
return 0;
}
Riferimenti
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale Theme Moonwalk