Variable als Funktionsname



  • Hallo zusammen!
    ich definiere eine normale Funktion:

    int hallo(string, int, char);
    

    und möchte diese nun so aufrufen:

    string fname="hallo";
    fname(string ..., int ..., char...)
    

    Kann mir jemand sagen wie das geht? Hab bis jetzt nur Fehlermeldungen erhalten, ist auch nicht erstaunlich.
    Ich verwende g++ unter Debian.

    Liebe Grüsse
    crystal



  • Das ist wirklich nicht erstaunlich 😃 👍

    Das was du da vorhast, geht so nicht.. Warum rufst du die Funktion nicht normal auf? Oder was willst du erreichen?



  • Grobes Prinzip:

    std::map<std::string, int (*)(std::string, int, char)> env;
    env["hallo"] = hallo;
    env["hallo"]("world", 42, 'x');
    

    Aber höchstwahrscheinlich ist das keine geschickte Lösung, auch wenn's funktioniert.



  • Oh man, irgendwie denke ich in letzter Zeit nicht besonders weit 😞



  • Oder einfach die Funktion in dlls packen und dann per funktionsnamen laden 😛



  • Mit Funktionspointern:

    int hallo(string, int, char);
    int hallo2(string, int, char);
    
    typedef int (*HalloFuncPtr)(string, int, char);
    
    HalloFuncPtr hfp = &hallo;
    hfp("Wurst", 15, 'f');
    
    hfp = &hallo2;
    hfp("Wurst", 15, 'f');
    

    Meinst du sowas?

    Wenn du den Funktionsnamen wirklich per string haben moechtest, dann musste es so wie finix angedeutet hat ueber ne map machen.



  • Hmm wieso möchtest du die Variable als Funktion aufrufen? Wieso rufst du nicht die Funktion auf? Wofür is die denn dann da?

    int hallo(string, int, char);
    
    string fname="hallo";
    // bis hier richtig
    // Das hier kommt mir seltsam vor, weg damit.
    //fname(string ..., int ..., char...)
    // Wir nehmen das hier:
    hallo(fname, intVar, charVar);
    

    rya.



  • Scorcher24 schrieb:

    Hmm wieso möchtest du die Variable als Funktion aufrufen? Wieso rufst du nicht die Funktion auf? Wofür is die denn dann da?

    Vielleicht weil er die Funktion erst dynamisch zur Laufzeit aus einer Liste möglicher Funktionen auswählen will? (Beispielsweise in einigen Frameworks für Menüelemente verwendet)

    ==> Funktionspointer, Methodenpointer, Funktoren

    cu André



  • asc schrieb:

    Scorcher24 schrieb:

    Hmm wieso möchtest du die Variable als Funktion aufrufen? Wieso rufst du nicht die Funktion auf? Wofür is die denn dann da?

    Vielleicht weil er die Funktion erst dynamisch zur Laufzeit aus einer Liste möglicher Funktionen auswählen will? (Beispielsweise in einigen Frameworks für Menüelemente verwendet)

    ==> Funktionspointer, Methodenpointer, Funktoren

    cu André

    Ja das Prinzip von Funktionszeigern ist mir schon klar. Ok, beim mehrfachen betrachten, könnte man schon draufkommen, das er das vllt machen wollte... naja.
    Können wir nur abwarten, was er dazu sagt :D.
    rya.



  • asc schrieb:

    Scorcher24 schrieb:

    Hmm wieso möchtest du die Variable als Funktion aufrufen? Wieso rufst du nicht die Funktion auf? Wofür is die denn dann da?

    Vielleicht weil er die Funktion erst dynamisch zur Laufzeit aus einer Liste möglicher Funktionen auswählen will? (Beispielsweise in einigen Frameworks für Menüelemente verwendet)

    Die Anfangsfrage sieht nicht so aus, als ob da was kompliziertes dahinter steckt, sondern mehr nach Anfänger.



  • ==> Funktionspointer, Methodenpointer, Funktoren

    fuer c++ statt der funktions und methodenpointer kaemen noch Polymorphie in Frage.

    Ciao ...


Anmelden zum Antworten