JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=c36f23fb60a369f1876d1370298314b8Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Templates?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 13:58    Titel: Templates? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 14:30    Titel: Antworten mit Zitat

Hab jetzt dafür einfach mal ne dummy Klasse geschrieben, funktioniert aber leider nicht! Sad

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 16:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 17:50    Titel: Antworten mit Zitat

Du kannst auch einfach den << Operator überschreiben. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 18:46    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:
Du kannst auch einfach den << Operator überschreiben. Wink


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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 18:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum