Array von Funktionszeigern
-
Hallo zusammen,
Ich suche jetzt seit geraumer Zeit nach einer Lösung, leider ohne Erfolg. Deshalb hoffe ich, dass einer von euch mir helfen kann.
Ich würde gerne ein Array von Funktionszeigern in einer Klasse erstellen. Leider weiß ich nicht, wie man das richtig initialisiert. Der Code könnte folgendermaßen aussehen....
// header datei class A { public: A(); ~A(); private: void method1(float val); void method2(float val); // Initialisierung des Arrays ??? _fct } // cpp datei A::A() { // Methoden im Array festhalten _fct[0] = &A::method1; _fct[1] = &A::method2; // Aufruf einer der Methoden _fct[0](20.5f); } A::~A() {} void A::method1(float val) { /* code */ } void A::method2(float val) { /* code */ }Ich wäre euch sehr dankbar, wenn ihr mir verraten könnt, wie ich _fcts in der header richtig initialisiere.
Gruß T.
-
Du meinst deklarieren?

void (A::*_fcts)(float)[4];
-
Das ging ja flott. Leider funktioniert es so nicht. Die eckige Klammer wird unterstrichen mit der Meldung: "IntelliSense: Eine Funktion, die ein Array zurückgibt, ist nicht zulässig."
Stimmt, natürlich deklarieren. Das Initialisieren geschieht im Konstruktor. Bin den ganzen Tag schon am coden und etwas müde.

-
Ah lol, sry, ich bin auch schon zu müde heute:
void (A::*_fcts[4])(float);...
-
void (A::*_fcts[4])(float);...aber ich halte
typedef (A::*fooptr)(float); fooptr _fcts[4];für sinnvoller.
-
Es funktioniert endlich. Vielen Dank.
Noch eine Frage an 'seldon'. Warum hältst du die zweite Variante für sinnvoller?
-
Weil die erste ziemlich schwer zu lesen ist. Das ist schon mit Funktionszeigern so, und bei Methodenzeigern wie hier wird es sehr schnell sehr gemein. Mit typedef werden solche Dinge deutlich übersichtlicher.