Klassenvorlagen-Instanziierung
Im Gegensatz zu Funktionen von wenn Sie eine Klassenvorlage Instanziieren Sie die Klasse durch Angeben der Argumente für die Klassenvorlagen explizit instanziiert werden muss.So fügen Sie eine Instanz von TempClasserstellen:
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
Der Compiler generiert Code für eine Funktion oder eine Vorlagenklasse, wenn die Klasse oder die Funktion instanziiert wird.Eine Memberfunktion wurde instanziiert, wenn sie aufgerufen wird und eine virtuelle Memberfunktion wird instanziiert, wenn seine Klasse erstellt wird.Dies kann Probleme verursachen, wenn Sie eine Bibliothek mit Vorlagen für andere Benutzer erstellen.Weitere Informationen finden Sie unter Explizite Instanziierung.
Eine Klassenvorlage wurde spezialisiert zuerst instanziiert und anschließend vom Compiler.Der Compiler nicht instanziiert die Klassenvorlage, bis ein Verweis auf einen Member dieser Vorlagenklasse gebunden ist, sizeof verwendet wird, für die Klasse oder Instanz wird erstellt.
Eine explizite Spezialisierung einer Vorlage wird eine benutzerdefinierte Version der Vorlage für einen bestimmten Typ.
// template_instantiation2.cpp
template<class T> class X
{
};
// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}
Explizite Spezialisierung ohne template<> erzeugt einen Fehler.Versionen von Visual C++ vor Visual C++ .NET 2003 angenommenen diese Syntax:
// Explicit specialization of X with 'char'
class X<char> // C2906
{
};
Wenn die Vorlage explizit spezialisiert oder einmal instanziiert wurde, kann sie nicht explizit instanziiert oder spezialisierte ein zweites Mal im selben Programm für den gleichen Satz von Vorlagenargumenten.Alle anderen Spezialisierungen mit unterschiedlichen Vorlagenargumenten sind zulässig.
Wenn keine explizite Instanziierung oder eine Spezialisierung für ein bestimmtes Vorlagenargument vorhanden ist, wird die Vorlage instanziiert implizit an der Stelle, an der der ersten Verwendung ist.
Da verschiedene Instanziierungen der gleichen Vorlage unterschiedliche Typen sind, sind statische Member für eine Spezialisierung oder Instanziierung einer Vorlage getrennt von statischen Member für eine andere Spezialisierung oder eine Instanziierung der Vorlage.