JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Zeiger
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 08.04.2006, 20:32    Titel: Antworten mit Zitat

Und wieso ist das einfacher als den funktionsnamen oder eine id einfach in nem string/integer zu speichern?

In diesem Beispiel wäre das ja kein Problem. Ich weiß ja nicht wie das nun in deinem Projekt aussieht. Hast du da haufenweise Funktionen und willst wissen welche davon ausgeführt wurde?

Wenn du nur prüfen willst ob eine bestimmte Funktion aufgerufen wurde kannst du auch einfach eine boolesche Membervariable dafür anlegen.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SK
Mini JLI'ler


Alter: 36
Anmeldedatum: 11.06.2005
Beiträge: 20

Medaillen: Keine

BeitragVerfasst am: 08.04.2006, 20:40    Titel: Antworten mit Zitat

1. strings sind länger als ne einfache Zahl, d.h. ein bisschen langsamer
2. die IDs, die ich erst definiere, muss ich auch selber werwalten

FAZIT: Zeiger gehen einfacher, ich spare zeit und nerven (wenns ja gehen würde) und jetzt fragt bitte nicht immer warum ich das so machen will.
Tatsache ist ,dass es so nicht geht und ich nicht kapier wieso. Deshalb hab ich hier gepostet, damit man mir den Grund verrät und MICH nicht ständig fragt, wie mans anders machen könnte.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 08.04.2006, 21:16    Titel: Antworten mit Zitat

CPP:
struct a
{
   void do_something(){}
   int do_something_else(){return 0;}

   int do_with_param(int x){return x;}
};

template<class T>
unsigned int get_address_of(T method_ptr)
{
   union
   {
      T ptr;
      unsigned int address;
   }t;

   t.ptr = method_ptr;
   return t.address;
}

struct c
{
   unsigned int address_of_called_func;

   ~c()
   {
      if( address_of_called_func == get_address_of(&c::call_me) )
      {
         std::cout<<"Erwischt! Nicht aufrufen junge!!!!11"<<std::endl;
      }
      else
      {
         std::cout<<"Alles klar!"<<std::endl;
      }
   }

   long call_me(unsigned int x,char* b,std::ostream& s)
   {
      address_of_called_func = get_address_of(&c::call_me);
      return 0;
   }
};

int main()
{
   std::cout<<get_address_of(&a::do_something)<<std::endl;
   std::cout<<get_address_of(&a::do_with_param)<<std::endl;

   {
      c the_c;

      the_c.call_me(0,0,std::cout);
   }
   {
      c the_c_revived;
   }


   std::cin.get();
}


_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proggaholic
Junior JLI'ler


Alter: 36
Anmeldedatum: 07.05.2005
Beiträge: 85
Wohnort: Heap
Medaillen: Keine

BeitragVerfasst am: 03.05.2006, 21:49    Titel: Antworten mit Zitat

Zu der Sache mit dem void-Zeiger:
Es ist unzulässig, ihm einen (neuen) Wert über eine Dereferenzierung zuzuweisen. Mit anderen Worten, er darf nicht schreibend auf den Wert zugreifen. Damit sollte sowas nicht gehen:

CPP:
int foo = 42;

// Gültig
void *bar = &foo;

// Sollte Fehler verursachen
*bar = 23;


Der konkrete Fehler, der bei dir auftritt, könnte ausgelöst werden,
weil du versuchst, zu void* zu casten (c-cast? Ist die Frage, wie es da mit Zeigern auf Funktionen aussieht). Weil void* aber sowieso keinen bestimmten Typ hat, ist das vielleicht der Grund, warum der Compiler meckert. Konvertierung ist einfach nicht definiert. Vielleicht ist das aber auch nicht ganz richtig, war nur so ein Einfall. Vielleicht kommst du damit einen kleinen Schritt weiter.

mfg
proggaholic
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 04.05.2006, 12:37    Titel: Antworten mit Zitat

ist schon ein wenig frech, heir so zu kommen, und so vorderungen zu stellen aber naje (wenn du vielelich tkein Newbe bist, so gibts es heir doch sicherlich einige, die sich vielelicht nciht vorher lange überlegt haben, warum es nur diese eine Lösung gibt. Dann kann man das aber auch sagen, und nicht sowas fordern wie bitte nur Antworten und kein gelaber)

Der Grund das Globale Funktionen gehen, Member aber nicht wird denke ich der selbe sei, wie der das man CALLBACK funktionen nicht einfach so als Member machen kann. Denn eine Memberfunktion muss wissen auf welches Objekt sie zeig,t bzw. zu welchem sie gehört, damit auch schön imemr das richtige Objekt manipuliert wird. Daher fügt der Compiler im Funktionsaufruf imemr noch so ne Art Zeiger auf das Objekt hinzu, damit die Funktion das richtige macht. Speicherst du nur den Zeiger auf eine Funktion geht diese Information höchstwahrscheinlich verloren, d.h. du hast ne Memberfunktion ohne Objekt und das kann ja nicht gehen.
Ist die Memberfunktion statisch müsste es gehen, dann hast du alelrdings keinen Zugriff auf nichtstatische Klassenelemente mehr.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
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