Sende data med et event

Tags:    c++

Jeg er igang med at lave noget, som jeg selv syntes man godt kan kalde et event system. Det skal fungere på følgende måde:

Der skal være en eventManager class, som alle der vil sende og modtage events skal have en pointer til. Når man så vil lave et event og sende det, skal de ske på følgende måde;

Man laver et event af typen Event, og en pointer til Noget event data af en type der nedarver fre IEventData.

eksempel:
Fold kodeboks ind/udKode 


det eventManager nu går, er at kalde funktionen handleEvent(e) i alle klasser der lytter til GAME_STARTED events.

Problemet er at få det data man har sendt med eventet tilbage i handleEvent funktionen, da Event klassen kun har en pointer til IEventData, og ikke til den specifikke form for event data(her er det: EvtData_GameStarted som indeholder en streng, men det kunne også være et EvtData_ActorMoved der indholdt en pointer til en Actor osv.)

Er det overhovedet mugligt, eller skal jeg tænke hele mit event system om?



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Visitor pattern!!



Jeg har ikke ret meget tid lige nu, men prøv at tage et kik på:
http://en.wikipedia.org/wiki/Visitor_pattern

Måske kan det bruges, ellers får jeg nok tid til at komme med andre forslag, en gang sent i aften.



Tak, det vil jeg lige kigge på :D



Har jeg forstået det rigtigt, vis jeg forstår det som om, at grund ideen er er, at:

Man kalder en funktion i eventet, der så kalder en funktion et andet sted, med sig selv som argument?



Jeps, det lyder rigtigt. Ideen er at når eventen "kalder en funktion et andet sted, med sig selv som argument", så kalder den den rigtige funktion, den med den rigtige type.



Jeps, det lyder rigtigt. Ideen er at når eventen "kalder en funktion et andet sted, med sig selv som argument", så kalder den den rigtige funktion, den med den rigtige type.


Ok, så istedet for at have et if statement i handleEvent(Event e), der tjekker hvilken type eventet har, så overloader jeg bare handleEvent, til alle de forskellige typer.

Det prøver jeg :D

Tak for hjælpen.



t