Alcuni linguaggi di programmazione, ad esempio java o C#, inizializzano automaticamente le variabili
al momento della loro dichiarazione. Questo è un grande vantaggio
perché solleva il programmatore da questo onere, che può diventare
noioso e causa di errore soprattutto quando si a che fare con classi
contenenti più di un costruttore.
Il
C++, purtroppo, non fornisce questo particolare meccanismo, ma può
essere emulato grazie ai template. Prima di proseguire è bene ricordare
che i template sono una caratteristica del C++ che consente di
realizzare del codice parametrico che viene espanso durante la fase di compilazione.
La questione diventa particolarmente noiosa con le strutture, poiché costringe il programmatore ad aggiungere in ogni costruttore una chiamata alla funzione memset per azzerarne tutti i campi.
typedef struct libro
{
char titolo[100];
char autore[50];
int anno_pubblicazione;
float prezzo;
} t_libro;
t_libro guida;
memset (&guida, 0, sizeof(guida));
Detto
questo possiamo continuare e scrivere un template che possa essere
utilizzato per effettuare automaticamente l'inizializzazione di una
struttura:
template <typename>
struct Clean : public T
{
Clean()
{
memset(this, 0, sizeof(T));
}
};
Come si vede dal frammento di codice precedente, la struttura passata come parametro al template è estesa dalla classe Clean, che nel suo costruttore provvede ad azzerare se stessa e di conseguenza la classe base.
Vediamo un esempio di utilizzo.
int main()
{
Clean<t_libro> libro;
std::cout << libro.titolo << std::endl;
return 0;
}
ded09db6-373e-40ab-91a2-5be386c0fd6f|1|5.0