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

Wie kann eine „externe Vorlage' die Instanziierung redundanter Vorlagen in C verhindern?

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 20:42:09515Durchsuche

How Can `extern template` Prevent Redundant Template Instantiation in C  ?

Verwendung externer Vorlagen zur Vermeidung der Vorlageninstanziierung

Die Vorlageninstanziierung ist ein entscheidender Schritt in der C-Programmierung, bei der bestimmte Vorlageninstanzen zur Kompilierungszeit erstellt werden . In bestimmten Szenarien ist es notwendig, die Vorlageninstanziierung zu steuern, um die Kompilierungszeit zu optimieren und redundante Definitionen zu vermeiden. Hier kommt das Schlüsselwort „extern template“ ins Spiel.

Externe Vorlagen für Funktionsvorlagen

Bei Verwendung mit Funktionsvorlagen weist die externe Vorlage den Compiler an, das angegebene nicht zu instanziieren Vorlage innerhalb der aktuellen Übersetzungseinheit. Es signalisiert, dass eine Instanziierung dieser Vorlage an anderer Stelle im Programm gefunden wird. Dies ist besonders nützlich in Szenarien, in denen mehrere Quelldateien dieselbe Vorlage mit identischen Parametern instanziieren, was zu mehreren Definitionen führt, die der Compiler verwerfen muss.

Beispiel:

Bedenken Sie das Folgender Codeausschnitt:

// header.h
template <typename T>
void f() { /* Body */}

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

// source2.cpp
#include "header.h"
extern template void f<int>();
void something2() { f<int>(); }

In diesem Fall informiert die externe Vorlage in source2.cpp den Compiler darüber, dass die f Die Vorlageninstanziierung sollte von einer anderen Stelle übernommen werden. Dies verhindert, dass der Compiler eine redundante Instanziierung generiert und diese später beim Linken verwirft.

Externe Vorlagen für Klassenvorlagen

Ähnlich wie Funktionsvorlagen können auch externe Vorlagen verwendet werden mit Klassenvorlagen. Dies geschieht, um mehrere Instanziierungen von Vorlagenklassen mit denselben Parametern zu vermeiden.

Beispiel:

// header.h
template <typename T>
class MyClass { /* Body */}

// source1.cpp
#include "header.h"
MyClass<int> obj1;

// source2.cpp
#include "header.h"
extern template class MyClass<int>;
MyClass<int> obj2;

Hier stellt die externe Vorlage in source2.cpp sicher, dass die MyClass Die Vorlagenklasse wird nur einmal instanziiert, wodurch redundante Definitionen vermieden werden.

Richtlinien für die Verwendung externer Vorlagen

  • Verwenden Sie externe Vorlagen nur, wenn Sie sicher sind, dass eine Instanziierung der Die Vorlage existiert an anderer Stelle im Programm.
  • Diese Technik kann auf Funktionsvorlagen, Klassenvorlagen und sogar Vorlagenmitglieder angewendet werden Funktionen.
  • Im Allgemeinen ist es ratsam, alle Vorlagendefinitionen und Instanziierungen in einer einzigen Header-Datei zu speichern, um potenzielle Konflikte zu vermeiden.
  • Wenn es nicht möglich ist, Vorlagendefinitionen zu zentralisieren, verwenden Sie insgesamt externe Vorlagen aber eine Quelldatei, in der die Vorlage verwendet wird.

Das obige ist der detaillierte Inhalt vonWie kann eine „externe Vorlage' die Instanziierung redundanter Vorlagen in C verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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