Freigeben über


Explizite Instanziierung

Mit expliziter Instanziierung können Sie eine Instanziierung einer auf Vorlagen basierenden Klasse oder Funktion erstellen, ohne sie tatsächlich im Code zu verwenden. Da es hilfreich ist, wenn Sie Bibliotheksdateien (.lib) erstellen, die Vorlagen für die Verteilung verwenden, werden unbeabsichtigte Vorlagendefinitionen nicht in Objektdateien (.obj) eingefügt.

Beispiele

Dieser Code instanziiert MyStack explizit für int Variablen und sechs Elemente:

template class MyStack<int, 6>;

Diese Anweisung erstellt eine Instanziierung von MyStack, ohne Speicher für ein Objekt zu reservieren. Code wird für alle Member generiert.

Die nächste Zeile instanziiert explizit nur die Konstruktormemberfunktion:

template MyStack<int, 6>::MyStack( void );

Sie können Funktionsvorlagen explizit instanziieren, indem Sie ein bestimmtes Typargument verwenden, um sie neu einzuschließen, wie im Beispiel in der Instanziierung von Funktionsvorlagen gezeigt.

Sie können das extern Schlüsselwort verwenden, um die automatische Instanziierung von Mitgliedern zu verhindern. Zum Beispiel:

extern template class MyStack<int, 6>;

Entsprechend können Sie bestimmte Member als nicht instanziiert und extern kennzeichnen:

extern template MyStack<int, 6>::MyStack( void );

Sie können das extern Schlüsselwort verwenden, um den Compiler daran zu hindern, denselben Instanziierungscode in mehr als einem Objektmodul zu generieren. Sie müssen die Funktionsvorlage instanziieren, indem Sie die angegebenen expliziten Vorlagenparameter in mindestens einem verknüpften Modul verwenden, wenn die Funktion aufgerufen wird. Andernfalls wird beim Erstellen des Programms ein Linkerfehler angezeigt.

Hinweis

Das extern Schlüsselwort in der Spezialisierung gilt nur für Memberfunktionen, die außerhalb des Textkörpers der Klasse definiert sind. Die Funktionen, die in der Klassendeklaration definiert werden, gelten als Inlinefunktionen und werden immer instanziiert.

Siehe auch

Funktionsvorlagen