AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Speichern von pointer in hash_multimap

Speichern von pointer in hash_multimap

Ein Thema von Jan · begonnen am 3. Dez 2006
Antwort Antwort
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#1

Speichern von pointer in hash_multimap

  Alt 3. Dez 2006, 16:07
Hallo DPler,

ich weiß zwar, dass es sich hier um ein Delphiforum handelt, aber da ich weiß, dass hier jede menge Leute zugange sind, die auch in C++ fit sind und man hier immer sehr gut geholfen wird stell ich einfach mal ne C++ Frage:

Ich bin dabei einen Callbackmanager zu implementieren, Dazu möchte ich beliebige Methoden (mit definiertem Methoden-header) aus beliebigen Klassen entgegennehmen und in einer hash_multimap mit einem unsigned int gepaart abspeichern. Der unsigned int soll dabei mein key sein und reflektiert einen Tastaturkey. (Ich möchte auf Keyboardtastendrücke callbacks ausführen)
Dazu habe ich mir eine Callbackclasse angelegt, die auf einem Template basiert, damit ich den Klassentyp der Callbackmethode nicht kennen muss. In dieser Klasse wird dann auch der Methodenzeiger entgegengenommen und abgespeichert.
Mein Callbackmanager nimmt dann einen pointer auf eine Instanz einer solchen Callbackclasse entgegen und speichert ihn mit einem unsigned int in meine hash_multimap.
Das Problem:
Wenn ich die Instanz der Klasse Callback direkt nutze um den gespeicherten Methodenpointer zu nutzen klappt alles wunderbar, aber wenn ich den pointer auf die Instanz in die hash_multimap packe, auslese und dann versuche die Methode auszuführen bekomme ich eine exception.
Auch wenn ich versuche Membervariabeln aus meiner Callbackinstanz zu lesen, nachdem ich den pointer aus der map geholt habe bekomme ich irgendwelche wilden Werte raus. Also denke ich mal, dass der pointer hinüber ist.
Hier der relevante source zum Speichern der Callbackklasse in der hash_multimap.

WWRCallbackManager_cl.h:

Code:
...
stdext::hash_multimap<unsigned int,WWRCallback_cl*> callbacktable;
void RegisterCallback(unsigned int, WWRCallback_cl*);
...
WWRCallbackManager_cl.cpp:

Code:
void WWRCallbackManager_cl::RegisterCallback(unsigned int key, WWRCallback_cl* cbobject)
{
   callbacktable.insert(stdext::hash_multimap<unsigned int,WWRCallback_cl*>::value_type(key,cbobject));
}


void WWRCallbackManager_cl::TickFunction()
{
   stdext::hash_multimap <unsigned int, WWRCallback_cl*>::iterator cb_Iter;
   if(callbacktable.size()>0)
   {
      for ( cb_Iter = callbacktable.begin( ); cb_Iter != callbacktable.end( );cb_Iter++ )
      {
         if(Vision::Key.IsPressed(cb_Iter -> first))
         {
       
            cb_Iter -> second -> Execute(3);  //Exception tritt hier auf
         }
      }
   }
}
Was genau mach ich falsch?
Ich hoffe mal es ist verständlich was da passiert und dass C++ nicht gegen irgendwelche wichtigen Boardregeln verstößt.

Vielen Dank und tschö!
-Jan-
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz