Heim > Backend-Entwicklung > C++ > Können C-Klassen mit Vorlagen in .hpp- und .cpp-Dateien aufgeteilt werden?

Können C-Klassen mit Vorlagen in .hpp- und .cpp-Dateien aufgeteilt werden?

Patricia Arquette
Freigeben: 2024-12-22 05:49:08
Original
960 Leute haben es durchsucht

Can Templated C   Classes Be Split into .hpp and .cpp Files?

Aufteilen von C-Klassen mit Vorlagen in .hpp/.cpp-Dateien: Ist das möglich?

Problem:

Der Versuch, eine C-Klasse mit Vorlagen in .hpp- und .cpp-Dateien aufzuteilen, führt zu Kompilierungsfehlern aufgrund von undefinierte Verweise auf Konstruktor und Destruktor Symbole.

main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()'
main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()'
Nach dem Login kopieren

Code:

stack.hpp

#ifndef _STACK_HPP
#define _STACK_HPP

template <typename Type>
class stack {
    public:
            stack();
            ~stack();
};
#endif
Nach dem Login kopieren

st ack.cpp

#include <iostream>
#include "stack.hpp"

template <typename Type> stack<Type>::stack() {
        std::cerr << "Hello, stack " << this << "!" << std::endl;
}

template <typename Type> stack<Type>::~stack() {
        std::cerr << "Goodbye, stack " << this << "." << std::endl;
}
Nach dem Login kopieren

main.cpp

#include "stack.hpp"

int main() {
    stack<int> s;

    return 0;
}
Nach dem Login kopieren

Antwort:

Es Es ist nicht möglich, Vorlagenklassen in einer separaten CPP-Datei zu implementieren und zu kompilieren. Die Implementierung muss in der .hpp-Datei enthalten sein, da der Compiler beim Generieren von Speicherlayout und Methodendefinitionen für Vorlagenklassen Kenntnisse über den Datentyp benötigt. Der Versuch, die CPP-Datei unabhängig zu kompilieren, führt zu folgenden Problemen:

  • Die Objektdatei wird nicht mit den Klasseninformationen generiert.
  • Der Linker findet die Symbole nicht die Objektdateien und der Build schlägt fehl.

Alternative Lösung:

Um Implementierungsdetails auszublenden, sollten Sie die Trennung von Datenstrukturen und Algorithmen in Betracht ziehen. Erstellen Sie Klassen mit Vorlagen, um Datenstrukturen darzustellen, während Klassen ohne Vorlagen die Algorithmen verarbeiten und die Datenstrukturen nutzen. Dies ermöglicht das Verbergen wesentlicher Implementierungsdetails in separaten Bibliotheken, ohne auf Vorlagenklassen angewiesen zu sein.

Das obige ist der detaillierte Inhalt vonKönnen C-Klassen mit Vorlagen in .hpp- und .cpp-Dateien 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