Inizializzazione di template class data members
Come inizializzare una variabile della quale non conosciamo il tipo?
Author: Mario Graziosi, mgnospam@fgasoftware.com
Come inizializzare una variabile della quale non conosciamo il tipo? Per esempio, immaginiamo questo template:
template<class T>
class X {
public:
X(): n(0)
{}
private:
T n;
};
In questo modo, se istanziamo la classe X con double o int siamo sicuri che 'n' sarà inizializato a zero:
X<int> a;ma cosa succede se qualcuno scrive:
X<int> b;
X<string> c;Sicuramente il compilatore ci segnalerà un errore perchè non è possibile inizializzare una string con un intero. Una delle regole del C++ ANSI ci permette di riscrivere la lista di inizializzazione del costruttore così:
X(): n()
{}
In questo modo stiamo dicendo al compilatore di inizializzare 'n', qualunque sia il suo tipo, utilizzando il default constructor (se si tratta di una classe) oppure con zero se si tratta di un tipo intrinsico del C (double, int, char...). Questa nuova versione inizializzerà correttamente sia i tipi intrinsici che i tipi definiti dall'utente come string, complex, ecc.