Heim > Backend-Entwicklung > C++ > Wie können „externe Vorlagen' in C 11 redundante Vorlageninstanziierungen vermeiden?

Wie können „externe Vorlagen' in C 11 redundante Vorlageninstanziierungen vermeiden?

DDD
Freigeben: 2024-12-20 14:59:13
Original
277 Leute haben es durchsucht

How Can `extern template` in C  11 Avoid Redundant Template Instantiations?

Vermeiden der Vorlageninstanziierung mit externer Vorlage (C 11)

Das Schlüsselwort extern template in C 11 bietet einen Mechanismus, um unnötige Vorlageninstanziierungen zu verhindern und so die Kompilierungszeit und die Objektdatei zu reduzieren Größe. In bestimmten Szenarien ist es hilfreich zu wissen, dass eine Vorlage an anderer Stelle instanziiert wird, und dieses Schlüsselwort zu verwenden, um den Compiler anzuweisen, die Instanziierung nicht durchzuführen.

Verwendung für Funktionsvorlagen

Im Gegensatz zum Beispiel in der Frage kann das Schlüsselwort extern template auch für Funktionsvorlagen verwendet werden. Betrachten Sie das folgende Beispiel:

// header.h
template<typename T>
void bigFunc();

// source1.cpp
#include "header.h"
void something1() {
    bigFunc<int>();
}

// source2.cpp
#include "header.h"
extern template void bigFunc<int>(); // This prevents its compilation in source2.cpp
void something2() {
    bigFunc<int>();
}
Nach dem Login kopieren

Ohne die externe Template-Anweisung würde bigFunc sowohl in source1.cpp als auch in source2.cpp kompiliert, was zu redundantem Objektcode führen würde. Durch die Verwendung einer externen Vorlage wird der Compiler angewiesen, bigFunc nicht in source2.cpp zu instanziieren, wodurch die Kompilierungszeit und die Objektdateigröße reduziert werden.

Verwendung für Klassenvorlagen

Wie in Abbildung 2 der Frage dargestellt, kann eine externe Vorlage auch für den Unterricht verwendet werden Vorlagen:

// header.h
template<typename T>
class myClass {
    T getValue();
};

// source1.cpp
#include "header.h"
extern template class myClass<int>; // Prevent instantiation here
void something1() {
    myClass<int> obj;
    obj.getValue();
}
Nach dem Login kopieren

In diesem Szenario wird der Compiler angewiesen, myClass nicht zu instanziieren. in source1.cpp, um sicherzustellen, dass es nur einmal im Projekt instanziiert wird.

Wichtige Überlegungen

Die Verwendung einer externen Vorlage sollte auf Situationen beschränkt werden, in denen sie vorhanden ist Es ist bekannt, dass die Vorlage an anderer Stelle instanziiert wird. Wenn es nicht instanziiert wird, führt das Programm zu unaufgelösten Referenzen. Als bewährte Methode wird empfohlen, alle Vorlageninstanziierungen in einer einzigen Header-Datei zu deklarieren, um potenzielle Probleme zu vermeiden, die durch mehrere Instanziierungen in verschiedenen Dateien verursacht werden.

Das obige ist der detaillierte Inhalt vonWie können „externe Vorlagen' in C 11 redundante Vorlageninstanziierungen vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage