Arrays und Funktionszeiger
-
Tachchen Zusammen,
ich sitze nun seit zwei Tagen vor der Aufgabe, einen alten Quellcode zu verschlanken. Dort wird ein- und derselbe Parameter durch mehrere Funktionen geschickt, um ein bestimmtes Ergebnis abzuprüfen.
Um nun nicht beliebig viele Aufrufe untereinander zu schreiben, ist mein Anliegen, für jede Funktion einmal einen Funktionszeiger in einem Array anzulegen, welches hinterher nur noch schleifenweise abgefrühstückt wird.Nun habe ich mit Funktionszeigern vorher nie arbeiten müssen, dass Prinzip mit
int(*fktPtr)(param); fktPtr = &fkt;
ist mir aber mittlerweile geläufig, ebenso wie das
array<int>^ arr;
Aber wie bekomme ich das Array nun so gestaltet, dass es nachher widerspruchslos die Anweisung
arrFktPtr[0] = &fkt;
akzeptiert?
Habe schon alle mir einfallenden Möglichkeit von Klammern und * versucht, aber die Fehler werden eher mehr als weniger.
Viele Grüße,
Sano
-
Hallo,
Du mischt native mit managed.geht selten gut, wenn man nicht genau weiss, was man tut.
In C++/CLI (.NET) würde man das wie folgt machen:
Wobei der Delegate die .NET Variante von Funktionszeigern (aller Art) ist.#include "stdafx.h" using namespace System; delegate int FuncDelegate(); ref class A { public: static int func1() { return 1; } int func2() { return 2; } }; int main(array<System::String ^> ^args) { A^ a = gcnew A(); array<FuncDelegate^>^ arr = gcnew array<FuncDelegate^>(2); arr[0] = gcnew FuncDelegate(&A::func1); // static arr[1] = gcnew FuncDelegate(a, &A::func2); // non-static for(int i = 0; i < arr->Length; ++i) { FuncDelegate^ del = arr[i]; int result = del(); } return 0; }
Alternativ kannst Du natürlich auch alles native machen.
Dann könntest Du z.B. einen std::vector<fktPtr> nehmen (anstelle des array<..>).Simon
-
Wow, das ging ja fix.
Danke Dir Simon, das mit dem Delegate kannte ich noch nicht, jetzt funktionierts