Heim > Backend-Entwicklung > C++ > Wie vermeidet „externe Vorlage' die Instanziierung redundanter Vorlagen in C?

Wie vermeidet „externe Vorlage' die Instanziierung redundanter Vorlagen in C?

Barbara Streisand
Freigeben: 2024-12-14 12:50:12
Original
684 Leute haben es durchsucht

How Does `extern template` Avoid Redundant Template Instantiation in C  ?

Verwendung externer Vorlagen zur Vermeidung der Vorlageninstanziierung (C 11)

Bei der objektorientierten Programmierung spielen Vorlagen eine entscheidende Rolle bei der Bereitstellung allgemeiner Lösungen die mit unterschiedlichen Datentypen arbeiten. Wenn jedoch mehrere Quelldateien Vorlagen mit denselben Parametern instanziieren, kann dies zu mehreren Definitionen und einer längeren Kompilierungszeit führen.

Das Schlüsselwort extern template kann verwendet werden, um dieses Problem zu beheben und unnötige Vorlageninstanziierung zu vermeiden. Es weist den Compiler an, eine bestimmte Vorlagenspezialisierung innerhalb der aktuellen Übersetzungseinheit nicht zu instanziieren. Stattdessen verlässt sich der Compiler darauf, dass die Vorlage in einer anderen Quelldatei oder verknüpften Bibliothek instanziiert wird.

Funktionsvorlagen

Beim Umgang mit Funktionsvorlagen können externe Vorlagen verwendet werden Erzwingen Sie den Ausschluss der expliziten Vorlageninstanziierung. Betrachten Sie beispielsweise den folgenden Codeausschnitt:

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

// source1.cpp
#include "header.h"
void f<int>(); // Explicit instantiation

// source2.cpp
#include "header.h"
extern template void f<int>(); // Prevents explicit instantiation
void g() {
    f<int>();
}
Nach dem Login kopieren

In diesem Szenario instanziiert source1.cpp explizit f während source2.cpp eine externe Vorlage verwendet, um unnötige Instanziierung zu verhindern. Der Compiler verwendet die Instanziierung aus source1.cpp, wenn f wird in source2.cpp aufgerufen.

Klassenvorlagen

Das gleiche Prinzip gilt für Klassenvorlagen. Eine externe Vorlage kann verwendet werden, um mehrere Instanziierungen derselben Vorlagenklasse mit denselben Parametern zu vermeiden. Betrachten Sie das folgende Beispiel:

// header.h
template<typename T>
class foo {
public:
    void f();
};

// source1.cpp
#include "header.h"
template class foo<int>; // Explicit instantiation

// source2.cpp
#include "header.h"
extern template class foo<int>; // Prevents explicit instantiation
void h() {
    foo<int> obj;
}
Nach dem Login kopieren

Hier verhindert die externe Vorlage in source2.cpp die explizite Instanziierung von foo und stellt sicher, dass stattdessen die Instanziierung von source1.cpp verwendet wird.

Vorteile der Verwendung externer Vorlagen

Die Verwendung externer Vorlagen bietet mehrere Vorteile Vorteile:

  • Reduzierte Kompilierungszeit: Durch die Vermeidung unnötiger Vorlageninstanziierungen kann die Kompilierungszeit erheblich reduziert werden.
  • Kleinere Objektdateien: Mehrere Instanziierungen derselben Vorlage führen zu größeren Objektdateien. Eine externe Vorlage hilft, dieses Problem zu beseitigen.
  • Konsistenter Code: Indem sichergestellt wird, dass Vorlagen nur einmal instanziiert werden, wird die Konsistenz gefördert und das Fehlerrisiko verringert.

Fazit

extern template ist ein leistungsstarkes Schlüsselwort, mit dem Entwickler die Instanziierung von Vorlagen steuern und die Kompilierungszeit optimieren können. Durch eine umsichtige Verwendung können Entwickler sicherstellen, dass Vorlagen effizient genutzt werden und die Fallstricke mehrerer Instanziierungen vermeiden, was zu einer schnelleren Kompilierung und kleineren ausführbaren Dateien führt.

Das obige ist der detaillierte Inhalt vonWie vermeidet „externe Vorlage' die Instanziierung redundanter Vorlagen in C?. 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