(C++) array mit Pointern auf Funktionen
-
irgendwie stell ich mich mal wieder zu doof an *g*
also, ich hab da einen Haufen Funktionen:
void hideStep1(void);
void hideStep1(void);
void hideStep1(void);
void hideStep1(void);
void hideStep1(void);
usw.und auf die möchte ich über ein Array zugreifen
array_mit_pFunktion[0]();
array_mit_pFunktion[1]();
array_mit_pFunktion[2]();usw.
aber irgendwie krieg ich die Dinger da nicht rein
weiss auch nicht. Gehen tut das irgendwie, gemacht habe ich sowas schon mal, aber ich kann den Code auch nicht finden.Hat einer 'n Zweizeiler zur Hand?
Dange
Ulli
-
void Func0(void) { } void Func1(void) { } void Func2(void) { } void Func3(void) { } void Func4(void) { } typedef void (*LP_FUNC)(void); LP_FUNC funcArr[]={Func0,Func1,Func2,Func3,Func4}; void exec() { funcArr[0](); funcArr[1](); funcArr[2](); funcArr[3](); //.... }
-
dange
-
hmmmm ... so hatte ich das eigentlich auch im Kopf.
nur in diesem Fall funzt das so nicht.Die Funktionen gehören zu einer einer Klasse
typedef void (*lp_AUF_VFUNKT)(void); class KWizz { public: KWizz(int language); ~KWizz(); (...) private: lp_AUF_VFUNKT lpHideFunc[10]; void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void); }; ************************* KWizz::KWizz(int language) { (...) lpHideFunc[0]=hideStep0; lpHideFunc[1]=hideStep1; (...) }
so nimmt der Kompiler das jedenfalls nicht.
-
Dann sag halt im typedef, dass sie zur Klasse gehören
typedef void (*KWizz::lp_AUF_VFUNKT)(void);
-
das funzt alles von hinten bis vorne nich!
ausserhalb einer Klasse -> no Prob
in einer Klasse:
entweder der Compiler meckert
oder die Funktion wird nicht ausgeführt
-
so!
denn eben mit Spagetticode!
eine lange case-Struktur geht auch.Hat sich also erledigt,
wobei, wurmt ich ja echt.
Vielleicht hat ja mal einer Lust was lauffähiges zu basteln
-
Darf man hier net mal ein bissel nachdenken mehr von den Postern erwarten??
class KWizz { public: KWizz(int language); ~KWizz(); private: typedef void (*KWizz::lp_AUF_VFUNKT)(void); lp_AUF_VFUNKT lpHideFunc[10]; void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void); };
Funktioniert doch OHNE Probleme!
-
Nachtrag:
void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void);
Sowas macht man eh net!!
Besser:
void showStep(int step); void hideStep(int step);
-
Original erstellt von RenéG:
**Darf man hier net mal ein bissel nachdenken mehr von den Postern erwarten??class KWizz { public: KWizz(int language); ~KWizz(); private: typedef void (*KWizz::lp_AUF_VFUNKT)(void); lp_AUF_VFUNKT lpHideFunc[10]; void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void); };
Funktioniert doch OHNE Probleme!**
ja, soweit war ich auch... (sorry)
aber weiter!
-
Original erstellt von RenéG:
**Nachtrag:void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void);
Sowas macht man eh net!!
Besser:
void showStep(int step); void hideStep(int step);
**
Die "Besser-Lösung" hätte Spagetticode zur Folge:
void showStep(int step) { switch(step) { case 1: ..... break; case 2: .... break; usw... } }
da jeder Step ganz unterschiedliche Objekte nach vorn holt bzw. versteckt
die "Steps" folgen auch nicht in glatter Reihenfolge, sondern die Reihenfolge ergibt sich erst zur Laufzeit aus den eingegebenen Daten.
-
Wie weiter?
Du rufst die Funktionen einfach auf.Du musst sie natürlich auf ein Objekt aufrufen. Das geht mit dem .* oder dem ->* Operator:
(this->*lpHideFunc[i])();
btw:
Das gehört ja wohl eindeutig nach C++ und nicht nach winapi.