Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.08.2003, 13:58 Titel: Templates? |
|
|
Hi!
Ich will einen Pointer haben, mit dem ich allemöglichen Datentypen mit new anlegen kann aber auch darauf zugreifen kann.
also z.B. so:
Code: |
cooler_datentyp *SUPER_POINTER;
SUPER_POINTER = new int;
*SUPER_POINTER = 2;
cout << SUPER_POINTER << endl;
delete SUPER_POINTER;
SUPER_POINTER = new char[100];
sprintf(SUPER_POINTER,"Ein Text");
cout << SUPER_POINTER << endl;
delete SUPER_POINTER;
|
Sowas wie das geht ja:
Code: |
#include <iostream.h>
int main()
{
void *pointer = new int;
int *pint = (int*)pointer;
*pint=2;
cout << *pint << endl;
return 0;
} |
Aber dann müsste ich ja immer z.B. (int*) mitangeben und es sind ja aber Datentypen die ich noch gar nicht kenne. Ich kann mir also nicht 20 Zeiger anlegen (int*,float*,douböe*,...) weil ich den Datentyp noch gar nicht kenne...
Kann man da irgendwas mit Templates machen und wenn wie?
ich hab gesehen das geht irgendwie template <T> aber dann muss man irgendwie ne Klasse anlegen oder so... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.08.2003, 14:30 Titel: |
|
|
Hab jetzt dafür einfach mal ne dummy Klasse geschrieben, funktioniert aber leider nicht!
dummy.cpp
Code: |
#include "dummy.h"
template <class T>
dummy<T>::dummy(void)
{
pType= new T;
}
template <class T>
dummy<T>::~dummy(void)
{
delete pType;
}
|
dummy.h
Code: |
template <class T>
class dummy
{
public:
dummy(void);
~dummy();
T *pType;
private:
};
|
main.cpp
Code: | #include <iostream.h>
#include "dummy.h"
int main()
{
dummy<int> dummy_int;
*dummy_int.pType = 2;
cout << *dummy_int.pType << endl;
return 0;
} |
Und ich bekomme folgende Fehlermeldung:
Zitat: |
--------------------Konfiguration: test - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
Linker-Vorgang läuft...
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall dummy<int>::~dummy<int>(void)" (??1?$dummy@H@@QAE@XZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall dummy<int>::dummy<int>(void)" (??0?$dummy@H@@QAE@XZ)
Debug/test.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
test.exe - 3 Fehler, 0 Warnung(en)
|
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.08.2003, 16:06 Titel: |
|
|
Okay so funktioniert das jetzt:
Code: | #include <iostream.h>
template <class T>
class Dummy
{
public:
// Konstruktoren
Dummy();
~Dummy() { delete pType; }
T *pType;
};
template <class T>
Dummy<T>::Dummy()
{
pType = new T;
}
int main()
{
Dummy<int> theDummy;
*theDummy.pType = 200;
cout << *theDummy.pType << endl;
return 0;
}
|
Aber das ist jetzt nur ein Teil von meinem ganzen Problem.
Ich möchte jetzt in echt keine Datentypen speichern sondern eher gesagt Funktionszeiger.
z.B.
int (*func1) (int);
int (*func2) (int,float);
int (*func3) (int,int,float,double);
also ich möchte hier beliebige Zeiger auf Funktionen einer Klasse übergeben können, die Anzahl der Parameter und welcher Parameter welchen Datentyp hat, damit die Klasse auch mit den Funktionen arbeiten kann.
Einziges Problem, wie leg ich jetzt so einen Allround Zeiger für Funktionen an?
denn <T> kann man ja jetzt nur mit einem Datentyp ersetzen. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.08.2003, 17:50 Titel: |
|
|
Du kannst auch einfach den << Operator überschreiben. ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.08.2003, 18:46 Titel: |
|
|
Hazel hat Folgendes geschrieben: | Du kannst auch einfach den << Operator überschreiben. |
Tschuldigung, aber ich kann dir da nicht folgen.
den Operator sehe ich hier nur bei cout. Soll ich den so überschreiben, dass ich den Zeiger nicht mehr deferenzieren muss oder was?
Aber der Beitrag bringt einen da nciht weiter mit meinem Problem...
Das war ja auch nur ein Test-Coding, dass ich weiß, dass ich einen reinzufälligen Datentyp anlegen kann, den ich halt gerade für den übergebenen Parameter brauche. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.08.2003, 18:48 Titel: |
|
|
Aso, dann hab ich dich missverstanden... der Datentyp boost::any tut was du willst. Aber du musst ihn trotzdem mit any_cast<> umcasten. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
|