Funktion aus Programm aufrufen
-
Abend ' alle zusammen,
ich wollt ma fragen wie man eine Funktion aus dem Programm(!) heraus aufrufen kann.
Also des is so:
Ich habe in nem Programm mehrere selbst geschriebene Funktionen eingebaut
und ich möchte dass der User in ein Eingabefeld in nem DialogFenster einen Funktionsnamen eingeben kann und diese Funktion wird dann aufgerufen.Wäre nett wenn ihr mir da weiterhelfen könntet
Gruß
Xzibit
-
Naja, du könntest es so machen:
if (str == "Funktion\(\)") Funktion();
Das mit den Klammer müsstest du ausprobieren, da bin ich mir nicht sicher, ob man deren Funktion wegnehmen muss.
-
Ja ne des is mir schon klar...
aber ich möchte ja net ne if-schleife mit sagen wir 100 Mögklichkeiten schreiben, wobei jede für ne andere Funktion steht.Deshalb bräuchte ich eine Funktion, der ich als Parameter den Funktionsnamen übergeben kann, den der User eingegeben hat. Und diese Funktion ruft dann die eigentliche Funktion auf.
Versteht ihr was ich meine ?
Unter Visual basic heißt der Befehl dafür CallByName ()...aber unter C++...kASchönen Gruß
Xzibit
-
Sowas wie in VB wirst du in C++ nicht finden. Da in C++ nunmal Symbole zur Compilezeit aufgelöst werden, ist der Zug zur Laufzeit schon abgefahren. Da musst du schon ein bissl tricksen.
Was mir so spontan einfällt wäre eine Map. Vorzugsweise std::map, ich glaub MFC hat aber sowas auch (iirc CMap). Dort wirst du aber auch nicht drumrumkommen, alle 100 Funktionen zwecks Initialisierung einmal anzugeben. Das sieht dann ungefähr so ausmap["foo"] = &foo; map["bar"] = &bar; // usw
Mit Makros kann man sich da evtl. noch etwas Schreib- und Wartungsarbeit sparen.
In der Map speicherst du praktisch unter einem Index (in deinem Fall wäre das dann ein String, nämlich der Funktionsname) die Funktionsadresse. Ob du das jetzt mit einem simplen Funktionszeiger machst (wie im Beispiel) oder einem Funktionsadapter aus irgendeiner Lib ist letztendlich egal. Die Vorgehensweise sieht dann ungefähr wie folgt ausInitialisierung der Map (wie oben gezeigt) ... CallByName(Funktion_als_String) { funktion = map[Funktion_als_String]; funktion(); } ... lese Eingabefeld -> Funktionsname CallByName(Funktionsname);