Funktion aufrufen, deren Name in einer Variable gespeichert ist
-
Hallo Community,
#include <iostream> using namespace std; void bla() { cout << "hi"; } int main(void) { bla() }So möge man z.B. eine Funktion aufrufen... es ist explizit im Code vorhanden, dass bla() aufgerufen werden soll..
Aber wie siehts damit aus:
#include <iostream> using namespace std; void bla() { cout << "hi"; } int main(void) { string a = "bla"; /* oder */ char *b = "bla"; }Ich speichere den Namen der Funktion in einer Variable. Ich behaupte, es gibt einen Weg, Funktionen, deren Name in einer Variable gespeichert ist, aufzurufen.
Weiss jemand wie das realisierbar ist?Mfg.
-
char *in="bla"; if(strcmp("bla",in)==0) bla();wieso nimmst du icht gleich einen function pointer?
lg lolo
-
Man kann sich aus einer DLL (geladen mit dlopen, LoadLibrary) mit nem string ein Symbol (z.B. Funktion) holen und das dann aufrufen.
Wenn du deine Funktion aber direkt im Executable liegen hast, hilft dir das wenig.
Du kannst dir jetzt statisch in einer bestimmten Funktion alle Funktionen eintragen (so wie mein Vorposter vorschlägt). Das ist aber verdammt unflexibel.Eine schönere Alternative wäre ein Typedef auf die Funktionssignatur und das dann in einer std::map ablegen:
typedef void (*stringMappedFun)(); std::map<std::string, stringMappedFun> functionMappings;Ein std::string ist nötig da Vergleiche mittels operator== durchgeführt werden und ein reiner const char* als key dafür nicht möglich ist.