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 die extern Schlüsselwort (keyword) verwenden, um die automatische Instanziierung von Mitgliedern zu verhindern. 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 );

Mit dem extern Schlüsselwort (keyword) können Sie den Compiler daran hindern, denselben Instanziierungscode in mehreren Objektmodulen 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

Die extern Schlüsselwort (keyword) 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