Heim > Backend-Entwicklung > C++ > Wie können externe Vorlagen die Vorlageninstanziierung in C optimieren?

Wie können externe Vorlagen die Vorlageninstanziierung in C optimieren?

Patricia Arquette
Freigeben: 2024-12-12 21:52:14
Original
180 Leute haben es durchsucht

How Can Extern Templates Optimize Template Instantiation in C  ?

Verwenden einer externen Vorlage zur Optimierung der Vorlageninstanziierung

In C 11 ist die externe Vorlage ein leistungsstarkes Schlüsselwort, das verwendet werden kann, um eine redundante Instanziierung von zu vermeiden Vorlagen, insbesondere wenn mehrere Übersetzungseinheiten (z. B. CPP-Dateien) möglicherweise dieselbe Header-Datei enthalten, die die Vorlage enthält Definitionen.

Konzept der externen Vorlage

Die externe Vorlage informiert den Compiler im Wesentlichen darüber, dass die aktuelle Übersetzungseinheit eine bestimmte Vorlage nicht instanziieren soll, auch wenn sie im Eingebundenen deklariert ist Kopfzeile. Dies ist nützlich, wenn Sie wissen, dass die Vorlage in einer anderen Übersetzungseinheit desselben Projekts instanziiert wird.

Verwendung für Funktionsvorlagen

Für Funktionsvorlagen eine externe Die Vorlagendeklaration kann wie folgt verwendet werden:

#include "header.h"
extern template void f<T>(); // Avoid instantiation in this translation unit
Nach dem Login kopieren

Dies gibt an, dass die f-Vorlage an anderer Stelle im Projekt definiert wird und nicht instanziiert werden sollte aktuelle Datei.

Verwendung für Klassenvorlagen

Ähnlich hat eine externe Vorlagendeklaration für Klassenvorlagen die folgende Form:

#include "header.h"
extern template class foo<int>; // Avoid instantiation in this translation unit
Nach dem Login kopieren

Dies stellt sicher, dass die Foo-Vorlagenklasse nicht in dieser bestimmten Übersetzungseinheit instanziiert wird.

Optimierung Anwendungen

Stellen Sie sich das folgende Szenario vor:

// header.h
template<typename T>
void f();
Nach dem Login kopieren
// source1.cpp
#include "header.h"
void f<int>();
Nach dem Login kopieren
Nach dem Login kopieren
// source2.cpp
#include "header.h"
void f<string>();
Nach dem Login kopieren

Ohne externe Vorlage instanziieren sowohl source1.cpp als auch source2.cpp die f-Vorlage, was zu führt mehrere Definitionen und verschwendete Kompilierungszeit. Durch die Verwendung einer externen Vorlage in einer der Dateien vermeiden wir diese Redundanz:

// source1.cpp
#include "header.h"
void f<int>();
Nach dem Login kopieren
Nach dem Login kopieren
// source2.cpp
#include "header.h"
extern template void f<int>();
void f<string>();
Nach dem Login kopieren

Wichtige Punkte

  • Verwenden Sie eine externe Vorlage nur, wenn Sie sind sicher, dass die Vorlage an anderer Stelle im Projekt instanziiert wird.
  • Dies gilt sowohl für Funktionsvorlagen als auch für Klassenvorlagen als Template-Member-Funktionen.
  • Die Verwendung externer Templates kann die Kompilierungszeit erheblich verkürzen und die Objektdateigröße optimieren, insbesondere wenn mit großen oder häufig verwendeten Templates gearbeitet wird.

Das obige ist der detaillierte Inhalt vonWie können externe Vorlagen die Vorlageninstanziierung in C optimieren?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage