Creazione di un'istanza del template di classe
A differenza dei template di funzione quando viene creata un'istanza del template di classe, è necessario creare esplicitamente istanze della classe grazie gli argomenti per i modelli della classe.Per creare un'istanza di TempClass:
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
Il compilatore genera codice per una classe modello o una funzione quando la classe o la funzione è stata creata un'istanza.Una funzione membro viene creata un'istanza quando viene chiamata una funzione membro virtuale viene creata un'istanza di alla relativa classe viene costruita.Ciò può comportare problemi se si compila una libreria con i modelli per altri utenti.Per ulteriori informazioni, vedere Creazione di istanza esplicita.
Il modello di classe in primo luogo è specializzato e viene quindi creata un'istanza dal compilatore.Il compilatore non creare un'istanza del template di classe fino a un riferimento a un membro della classe modello, sizeof viene utilizzato sulla classe, o un'istanza viene creata.
Una specializzazione esplicita di un modello è una versione personalizzata del modello per un determinato tipo.
// template_instantiation2.cpp
template<class T> class X
{
};
// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}
specializzazione esplicita senza template<> verrà generato un errore.Versioni di Visual C++ precedenti a Visual C++ .NET 2003 accettato questa sintassi:
// Explicit specialization of X with 'char'
class X<char> // C2906
{
};
Se un modello in modo esplicito viene creata un'istanza o specializzata una volta, non può essere esplicitamente creare un'istanza o non specializzato una seconda volta lo stesso programma per lo stesso set di argomenti di modello.Ulteriori specializzazioni con diversi argomenti di modello sono consentite.
Se non è una creazione di istanza o una specializzazione esplicita di un argomento di modello particolare, il modello verrà implicitamente creare un'istanza nel punto in cui viene utilizzato per la prima volta.
Poiché le creazioni di istanze diverse dello stesso modello diversi tipi, membri statici per una specializzazione o creazione di istanze di un modello sono separati dai membri statici per una specializzazione o una creazione di istanze diverse dello stesso modello.