Methoden rumpf einer Methode bei laufzeit implementieren!!



  • Folgendes...
    Ich habe eine Klasse, diese solle eine Methode enthalten welche aber nur aus dem Methoden kopf besteht oder so ähnlich.
    Wenn ich jetzt z.b. ein Objekt der Klasse erstelle:

    (01)

    MyKlasse *foo= new MyKlasse();
    

    sollte z.b. die Methode "huhu"

    (02)

    foo->huhu(){......... Inhalt }
    

    erst implentitere werden dann

    (03)

    foo->start();
    

    ausgeführt werden welche die Mehthode "huhu" enhält !!

    Ist doch so ähnlich wie ne virtuelle Methode aber halt ohne Polymorpihe geht das ??



  • Ich glaube so kann Dir da keiner drauf antworten... Was zum Geier meinst Du mit "start enthält huhu"? Als String, als Bytecode, als Roman?!



  • die methode "huhu()" wird erst implementiert wenn das des objekts "foo" schon existiert!! und die Methode "start()" vom objekt "foo" ruft intern die Method "huhu()" auf!!!



  • Achso, jetzt ist mir alles klar. 😕

    Und "woraus" soll sich die Methode "start" manifestieren? Spracherkennung?



  • ne das ist ne CurveFit algorithmus!!

    die methode "huhu()" enthält quasie die Funktion die angefittet werden soll!

    und "start()" start die Curve fittung...



  • Hi BorisProgger, also mal zum Verständnis. Du möchtest den Programmcode einer Funktion/Methode erst zur Laufzeit setzen können. Richtig?

    Das geht nicht. Zumindest nicht so 😉 Eine interne Scriptsprache wäre hier die Lösung. Obwohl ich nicht ganz verstehe warum man das in deinem Fall nicht auch anders lösen kann. Es wäre Hilfreich, wenn du mal ein paar Beispiele machen könntest, welche zeigen was in der Methode huhu() stehen sollte.



  • wie würdest du das denn lösen??



  • Beispiel:

    class Calc(){
    
      int AA,BB;
    
    public:
    
      Calc(int a,int b){ AA=a; BB=b;};
      start(){ huhu(AA,BB);};
    
      SPEZIELLE METHODE =>> int huhu(int AA, int BB);
    
    }
    
    Calc *test= new Calc(4,5);
    

    // DIESE METHODE SOLLE JETZT ZU LAUFZEIT DEKLARIERT WERDEN!!!

    test::huhu(int AA,int BB){
      return AA+BB;
    }
    

    dann

    test->start();
    

    sooo hat mich jett jeamnd verstanden???? 🕶

    P.S: der Code ist nur so wie ich mir ihn vorstelle.. also nich an syntax mekkern



  • Hrm... Verständlich ist was anderes.

    Aber wenn Du das meinst was ich inzwischen glaube was Du meinst:
    Etwas was sowas kann nennt man "Compiler" oder "Interpreter" 😉



  • BorisProgger schrieb:

    // DIESE METHODE SOLLE JETZT ZU LAUFZEIT DEKLARIERT WERDEN!!!
    [cpp]test::huhu(int AA,int BB){
      return AA+BB;
    }
    

    Hier widersprichst du dir doch selbst. Der Rumpf deiner Methode existiert
    doch schon zur Compilezeit oder wo steht dieses return AA+BB?

    Willst du den Rumpf zur Laufzeit eingeben können?
    Wer bitte, soll ihn denn dann kompilieren können? So etwas geht nur
    in einer reinen Interpretersprache oder, wie Herrmann geschrieben hat,
    in einer Script-Sprache.

    Was du machen kannst, ist dir einen eigenen Parser zu schreiben der
    zur Laufzeit eine Funktion einlesen kann und diese selbst interpretiert.



  • Oder meinst du, dass du während der Laufzeit entscheiden kannst, welche deiner bereits geschrieben und compilierten Funktionen huhu bei einer bestimmten zur Laufzeit entstandenen Aktion genutzt werden soll? Das sollte doch mit Funktionszeigern gehen. Schätze, da kannste aber auch einfach die original Funktionsnamen nehmen.



  • ja klar die funktion huhu wird schon kompiliert , aber ich will den code halt extrern von der klasse schreiben...



  • Wie wärs dann, wenn du diese Funktion deiner Klasse (und/oder Funktion) einfach als Pointer übergibst?



  • Dann schreib Deinen Code doch in eine Funktion ausserhalb der Klasse?!

    Und jetzt, setz Dich bitte mal mit ein paar Begrifflichkeiten auseinander, wie "Deklaration", "Definition", "implementieren" oder "aufrufen"... Damit Du beim nächsten Mal eine Frage stellen kannst die in sich selbst erstmal Sinn ergibt, damit andere nicht zwei Seiten raten müssen was Du eigentlich willst. (Um genau zu sein 100% sicher ob ich es inzwischen weiss, bin ich nicht)



  • oh diese begriffe hab ich im 2ten semster gehört *fg*



  • Hem, kommt das nicht eher dem Visitorpattern nahe? Notfalls würde auch Factory helfen, die dann aber halt Objekte anstatt Methoden erzeugt. Aber das könnte man dan nmit dem Visitor kombinieren.

    Wenns das immer nicht ist: Script-Engine im Netz suchen.

    Artchi

    PS: Wer hat hier gesagt "Parser selbst schreiben"??? Dem müssten man den Hintern versolen! Dafür gibts Boost Spirit! 😃



  • Ich war das :p

    Dein Boost Spirit sieht ja ganz interessant aus, aber bevor
    sich da jemand eingearbeitet hat und produktiv werden kann, hat
    man einen eigenen kleinen Parser mehrmals selbst geschrieben. Und wenn
    man sich mit einer UP-Notation zufrieden gibt und sich dadurch die
    gesamte Klammererkennung und die Prioritätenerkennung (+, *, ^) erspart,
    ist der in 2 Stunden fertig geschrieben.

    Dem müssten man den Hintern versolen!

    Aber erst, wenn du Deutsch gelernt hast :p


Log in to reply