Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

killmichnich

unregistriert

1

11.07.2009, 11:07

funktion in map speichern

Hiho,
mich würde mal interessieren, ob ich Zeiger auf Funktionen in einer map oder nem array speichern kann, und die danach wieder aus dem array heraus aufrufen kann. Ich hatte mir das ganze so in etwa gedacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
void* funktionen[20];
void funktion1()
{
...
}

funktionen[0] = &funktion1;

das funktioniert so auch schonmal fehlerfrei. Nur jetzt würde mich eben interessieren, wie ich die funktion aus dem array wieder aufrufen kann.

Würde mich freuen könnte mir das wer sagen ^^

MfG Killmichnich

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

11.07.2009, 11:12

Funktionszeiger definiert man so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef void (* FuncPtr)(int);

void myFunction(int x)
{
    // tu was

}

// Funktion in Map packen

std::map<std::string, FuncPtr> functions;
functions["myFunction"] = &myFunction;

// wieder rausholen und aufrufen

FuncPtr f = functions["myFunction"];
(*f)(42);


Beachte aber, dass du so nur Funktionen in die Map packen kannst, die dieselbe Signatur (Rückgabetyp + Parameterliste) haben. Ansonsten gibt es boost::function.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

11.07.2009, 11:14

C-/C++-Quelltext

1
2
3
4
void ( *fp[20] )();

for ( int i = 0; i < 20; ++i )
    fp[i] = &foo;


Edit:

Zitat von »"David Scherfgen"«


(*f)(42);


Du musst den Funktionszeiger nicht nochmal extra dereferenzieren.

killmichnich

unregistriert

4

11.07.2009, 11:16

also so wie ich mir das da oben vorgestellt hab geht das nich?
was mach ich denn dann wenn ich funktionen mit verschiedenen enigabeparametern in der map speichern will? oO

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

11.07.2009, 11:17

Zitat von »"killmichnich"«

also so wie ich mir das da oben vorgestellt hab geht das nich?


Doch, siehe oben.

Zitat von »"killmichnich"«


was mach ich denn dann wenn ich funktionen mit verschiedenen enigabeparametern in der map speichern will? oO


Wieso sollte man sowas tun wollen?

killmichnich

unregistriert

6

11.07.2009, 11:20

naja ich hab mir überlegt das ich mir so ne textbox mach in die man befehle eingeben kann, dann nen button drückt und dann diese befehle ausgeführt werden. Dazu hab ich mir dann gedacht leg ich mir ne map mit den funktionen an map<string, void*>funktionen und geb dann einfach den befehl da ein so dass die funktion aufgerufen wird ... und da kanns doch auch mal sein dass es verschiedene eingabeparameter gibt?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

11.07.2009, 11:23

Zitat von »"David_pb"«

Du musst den Funktionszeiger nicht nochmal extra dereferenzieren.

Ja, ich weiß, aber ich finde es so anschaulicher :)

@killmichnicht:
Wie gesagt, schau dir boost::function an!
Und diesen Thread hier: https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=12028

killmichnich

unregistriert

8

11.07.2009, 11:27

ok danke =)

Werbeanzeige