Funktion in Headerdatei mit Templateklasse als Input
-
Hallo,
ich habe eine grundlegende Frage bezüglich einer Funktion.
Ich habe ein Klassentemplate (im Weiteren: m_klasse genannt) in der Headerdatei "meine_klasse.h". Mein aufrufendes Programm besitzt Zeiger auf einen dynamischen Speicher auf diese Klasse. Die Funktion ist in der headerdatei "m_interpolation.h" gespeichert.
Auszug aus m_interpolation.h:
#include <iostream> #include <cmath> #include "meine_klasse.h" // Klasse typedef unsigned int uint; double m_interpolation(m_klasse* PERSNR, double target, const double threshold){ // .... };Schon jetzt meckert mein VS 2010:
1 IntelliSense: Die Argumentliste für "Klassenvorlage "m_klasse"" fehlt.
Meine erste Frage lautet:
1. Wird das generell zu einem Fehler beim kompilieren führen?
Die Klasse m_klasse ist ein template:
Auszug aus meine_klasse.h:
template <typename T> class m_klasse{ // ... };Die Datentypen des Templates sind allerdings für die Funktion m_interpolation gleichgültig.
2. Muss ich trotzdem in m_interpolation.h bei der Funktionsdefinition angeben, dass es sich um einen template handelt?
z.B. so:
double m_interpolation(m_klasse<double>* PERSNR, double target, const double threshold){ // .... };Meine aufrufende Funktion soll nachher so aussehen:
// ... #include "meine_klasse.h" #include "m_interpolation.h" // ... double target = 3.14; double threshold = 1e-5; m_klasse<double>* A = new m_klasse<double>; // Den Inhalt von A veraendern, Werte zuweisen usw. double interpolierter_wert = m_interpolation(A, target,threshold); // ...Die Funktion m_interpolation soll nur Werte von der Klasse m_klasse auslesen. Die Klasse selbst hat aktuell noch kein Copy-constructor (wurde bisweilen noch nicht benötigt).
3. Sind die Werte von der Klasse A bei diesem Vorgehen in der Funktion m_interpolation verfügbar oder wird beim Übergeben in m_interpolation eine neue Klasseninstanz erzeugt (z.B. eine Kopie) und A besitzt nicht die in der aufrufenden Funktion veränderten Werte?
==> Ist mein Vorgehen erfolgsversprechend?Danke für eure Antworten
KmH
-
-
1. Wird das generell zu einem Fehler beim kompilieren führen?
jup.
-
Die Datentypen des Templates sind allerdings für die Funktion m_interpolation gleichgültig.
In dem Fall muss
m_interpolationein Funktionstemplate werden:template<typename T> double m_interpolation(m_klasse<T>* PERSNR, double target, const double threshold){ // .... };-
2. Muss ich trotzdem in m_interpolation.h bei der Funktionsdefinition angeben, dass es sich um einen template handelt?
s. o.
Du musst es auf jeden Fall als Template behandeln und eine Parameterliste liefern.-
Die Klasse selbst hat aktuell noch kein Copy-constructor (wurde bisweilen noch nicht benötigt).
Das hält dich aber nicht davon ab, ganz normale Stackobjekte und Referenzen zu verwenden, oder?
-
3. Sind die Werte von der Klasse A bei diesem Vorgehen in der Funktion m_interpolation verfügbar oder wird beim Übergeben in m_interpolation eine neue Klasseninstanz erzeugt (z.B. eine Kopie) und A besitzt nicht die in der aufrufenden Funktion veränderten Werte?
==> Ist mein Vorgehen erfolgsversprechend?
Hä? Du übergibst doch einen Zeiger, wo soll da die Instanz kopiert werden?
Ich habe das Gefühl, du hast Templates und die Grundlagen noch nicht so ganz verinnerlicht.
Meine Empfehlung: Such dir mal hier unter "Bücher" ein gutes Grundlagenbuch raus.
-