[C++] Frage zur expliziten Instanziierung von Templates

Zalman

Cadet
Mitglied seit
29.07.2004
Beiträge
35
Renomée
0
Hallo,

ich lese mich gerade in die Templates ein. Jedoch habe ich eine kleine Frage, das Kapitel in meinem Buch heißt "Ökonomische Instanziierung von Templates".

Damit sich die Objektdateien nicht unnötig aufblähen bei der massiven Verwendung von Templates, wird in meinem Buch empfohlen, das Template in 3 Datein aufzusplitten:

MeinTyp.h
#ifndef _MeinTyp_h_
#define _MeinTyp_h_

template<class T>
class MeinTyp {
public:
MeinTyp(T newElement);
void function();
private:
T element;
};

#endif



MeinTyp.cpp
#include "MeinTyp.h"

#include <iostream>
using std::cout;
using std::endl;

template<class T>
MeinTyp<T>::MeinTyp(T newElement) {
element = newElement;
}

template<class T>
void MeinTyp<T>::function() {
cout << "Element = " << element << endl;
}

und MeineInstanzen.cpp
#include "MeinTyp.cpp"

template class MeinTyp<int>;
template class MeinTyp<double>;


Nur wird im Buch nicht erklärt wie es jetzt weitergeht.

Muss ich jetzt MeinTyp.h oder MeineInstanzen.cpp über #include verwenden in der Datei mit meiner main()-Funktion?

Danke vorab :-) .

mfg
 
Ich bin nicht sicher was die Frage ist und was das genaue mit Templates zu tun hat, außer natürlich, dass es eine Template Klasse ist.

Es geht hier um die Aufsplittung von Deklration und Implementierung von Methoden einer Klasse in Header und Source Datei, soweit ich das verstehe.

Wenn Du so eine Klasse später irgendwo benutzen willst, reicht es den Header einzubinden, der Compiler/Linker wird dann die gleichnamige .cpp miteinbinden.

Die Spaltung in Header und Source hat übrigens nicht nur kosmetische Gründe, sondern verhindert (je nach Compiler Einstellungen) dass deine Methoden alle inline gesetzt werden.

Edit: Ich sehe es geht um was anderes, tut mir leid.
Bist du sicher, dass du das Buch nicht etwas mißverstanden hast? Ich sehe keinen Grund für die MeineInstanzen.cpp, was genau soll diese bringen?
 
Zuletzt bearbeitet:
Hallo,

die Frage war so gemeint, ob ich die Headerdatei mit der der Templatedeklaration oder die cpp Datei mit den 2 Instanzen in die Dateien die das Template nutzen, per #include einbinden soll.
Es soll ja verhindert werden wenn ich ein Template für int oder double erzeuge, dass nicht jedes Mal der Objektcode für das Template neu angelegt wird.


mfg
 
Ich bin der Meinung, dass solch ein "Overhead" von Templates bei der neuen Generation von Compiler bereits aus der Welt geschaffen ist.
Wäre vielleicht wert mal ein kleines Testprogramm zu schreiben und beobachten wie sich die Speicherbelegung/Geschwindigkeit verhält.

Habe ein ähnliches Programm geschrieben, dass OOP gegen Prozedurales Programmieren anhand einer einfachen Aufgabe gegeneinander testet (auf Zeit) und mit VC++ 8.0 kamen erstaunliche Ergebnisse heraus.

In deinem Programm denke ich nicht, dass es reicht die MeineInstanzen.cpp einzubinden, der Compiler würde ja dann trotzdem die Klasse MeinTyp nicht kennen.
Und würde man nicht den Sinn von Templates mit dieser Version total außer Kraft setzten? Wenn man es auf nur 2 Datentypen beschränkt, sollte man gleich überlade Methoden benutzen.
 
Zurück
Oben Unten