Heim > Backend-Entwicklung > C++ > Können C-Klassen mit Vorlagen in separate Header- und Implementierungsdateien aufgeteilt werden?

Können C-Klassen mit Vorlagen in separate Header- und Implementierungsdateien aufgeteilt werden?

Linda Hamilton
Freigeben: 2024-12-13 18:55:10
Original
438 Leute haben es durchsucht

Can Templated C   Classes Be Split into Separate Header and Implementation Files?

Ist die Aufteilung von C-Klassen mit Vorlagen in separate .hpp- und .cpp-Dateien möglich?

Beim Versuch, eine C-Klasse mit Vorlagen über separate Header zu kompilieren (.hpp) und Implementierungsdateien (.cpp) können Verknüpfungsfehler auftreten. Betrachten Sie den folgenden Code:

// stack.hpp
template <typename Type>
class stack {
    // ...
};
Nach dem Login kopieren
// stack.cpp
template <typename Type> stack<Type>::stack() {
    // ...
}
Nach dem Login kopieren
// main.cpp
#include "stack.hpp"
stack<int> s;
Nach dem Login kopieren

Die Kompilierung schlägt mit „undefinierter Referenz“-Fehler für die Vorlagenklassenmethoden fehl. Das Verschieben aller Methodenimplementierungen in die Header-Datei ist zwar möglich, aber keine ideale Lösung.

Warum die separate Kompilierung für Vorlagenklassen fehlschlägt

Das Problem ergibt sich aus der Tatsache, dass die Vorlage Klassen sind zur Kompilierungszeit nicht vollständig definiert. Der Compiler generiert Code für bestimmte Instanziierungen basierend auf den bereitgestellten Vorlagenparametern. Ohne die Vorlagenparameter kann der Compiler kein Speicherlayout und keinen Code für die Methoden in der Implementierungsdatei generieren.

Alternative: Datenstrukturen und Algorithmen trennen

Um Implementierungsdetails auszublenden Erwägen Sie unter Beibehaltung der Trennung die Trennung von Datenstrukturen und Algorithmen. Vorlagenklassen sollten in erster Linie Datenstrukturen definieren, während nicht auf Vorlagen basierende Algorithmusklassen diese verarbeiten oder verwenden. Dieser Ansatz verbirgt effektiv wertvolle Implementierungsdetails, ohne dass separate Implementierungsdateien für Vorlagenklassen erforderlich sind.

Das obige ist der detaillierte Inhalt vonKönnen C-Klassen mit Vorlagen in separate Header- und Implementierungsdateien aufgeteilt werden?. 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