so was wie for oder while selber machen



  • Kann man eine Funktion so schreiben, dass man beim aufrufen geschweifte Klammern benutzen kann?

    Also:

    void test (void) statement
    {
    	/*Funktionscode*/
    	statement		// führt den Code in den geschweiften Klammern aus
    	/*Funktionscode*/
    }
    

    Diese würde dann so aufgerufen werden:

    test()
    {
    	/*statementcode*/
    }
    

    als Antwort würde es mir reichen wenn jemand einfach eine Funktionsdeklaration als Beispiel aufschreiben könnte.
    Ein NEIN DAS GEHT NICHT würde natürlich auch als Antwort reichen 😉

    danke im voraus



  • NEIN DAS GEHT NICHT ⚠ ⚠ ⚠



  • du kannst mit Macros oder Funktoren arbeiten, wobei beide Loesungen entspr. Nachteile haben.



  • NEIN DAS GEHT NICHT

    sicher? 😞

    Hinweis mit dem Beitrag ist nicht "kingruedi" sondern ":)" gemeint



  • nein, ich hab das alles aus scherz gepostet, in wirklichkeit geht natuerlich deine Loesung!!!!!!!!!!!1

    warum sollte ich denn was posten, wo ich mir nicht sicher bin (ohne da hinzuschreiben, dass "ich mir nicht sicher bin")?



  • Nicht ganz so, wie du es wolltest, aber vielleicht kennst du das noch nicht:

    void test (void (*statement)()){ 
        /*Funktionscode*/ 
        statement();        // Aufruf der übergebenen Funktion    
        /*Funktionscode*/ 
    }
    ...
    
    void foo ()
    {
       // mach was
    }
    
    ...
    {
       test(foo);  // oder der Übersichtlichkeit halber test(&foo);
    }
    

    Aber du hast mich da grade auf 'ne Idee gebracht, wie es doch gehen könnte. Da muss ich mal was rumprobieren. Wird vielleicht nicht ganz perfekt, könnte aber klappen.



  • Yup so hab ichs auch gemacht. Aber das Problem ist folgendes:
    Ich habe zur Zeit insgesamt 3 Funktionen die irgendeinen Funktionspointer aufrufen sollen, und es könnten jederzeit mehr Funktionen werden

    template<typename Klasse_typ, typename Klassenfunktion_typ, typename Parameter_typ>
    void test(Klasse_typ *Klasse, void (Klasse_typ::*Klassenfunktion_typ) (Parameter_Typ), Parameter_Typ* Parameter)
    {
    	/* quellcode*/
    	(Klasse->*Klassenfunktion_typ)(*Parameter);
    	/* quellcode*/
    }
    
    template<typename Funktion_typ, typename Parameter_typ>
    /*Hier kommt die Funktionsdekleration hin, ähnich wie oben*/
    
    template<typename Funktion_typ, typename Parameter1_typ, typename Parameter2_typ>
    /*Hier kommt die Funktionsdekleration hin, ähnich wie oben*/
    

    Deshalb wäre es besser, wenn man eine andere Möglichkeit finden würde

    ------------

    Sag deshalb mal bitte deine Idee Helium. (auch wenns vielleicht nicht klappen wird)



  • Ich stelle mir etwas (zugegeben, hässlich - aber sollte gehen) in die Richtung vor:

    #define VALIDATE(func) bool irgendeinEindeutigerNameDenKeinSchweinVerwendet = func(); if(irgendeinEindeutigerNameDenKeinSchweinVerwendet)
    
    #include <cmath>
    bool Test()
    {
      return static_cast<bool>(rand() % 2);
    }
    
    int main()
    {
      VALIDATE(Test)
      {
        // mach was
      }
    }
    


  • was ist der sinn von irgendeinEindeutigerNameDenKeinSchweinVerwendet ? die variable kann man doch umgehen



  • Sag deshalb mal bitte deine Idee Helium. (auch wenns vielleicht nicht klappen wird)

    Habs probiert. Klappt nicht. Ich hatte vergesen, das Methoden von funktionsloklen Klassen nicht auf Variablen der Funktion zugrefeien können, in der Sie erstellt wurde. Deshalb ist meine Idee sinnlos. Schade 😞



  • func schrieb:

    was ist der sinn von irgendeinEindeutigerNameDenKeinSchweinVerwendet ? die variable kann man doch umgehen

    Ja, aber es sollte ja auch nur an einem einfachen Beispiel zeigen wie man es prinzipiell machen kann. Kann ja sein, dass noch etwas mit irgendeinEindeutigerNameDenKeinSchweinVerwendet gemacht wird bevor man an das if kommt 😉 .



  • @MaSTaH

    Dein Code hat 2 Schwächen die ich eigentlich vermeident wollte

    1.)
    (aber das ist schon gelöst *g*)
    Was ist, wenn der code in der Zeile mehrmals aufgerufen werden soll?
    Die Lösung: muß man halt mit for oder while machen
    2.)
    Was ist wenn in der Funktion main VALIDATE mehr als einmal aufgerufen wurde. Dann haste ne doppelte Definition von "irgendeinEindeutigerNameDenKeinSchweinVerwendet"



  • Soory für die unpassende Frage, aber gibts ein Buch, in dem sowas behandelt wird?(von wegen funktionen, die Funktionen aufrufen, die ihnen als Argument übergeben wurden)

    thx
    Dumpfie



  • C++ ist leider die falsche Sprache für so ein Anliegen, da sie weder anonyme Funktionen bzw. Code-Blöcke ala Smalltalk, noch Syntaxtransformationen, die über die Möglichkeiten des Präprozessors hinausgehen, bietet.



  • Dumpfie schrieb:

    Soory für die unpassende Frage, aber gibts ein Buch, in dem sowas behandelt wird?(von wegen funktionen, die Funktionen aufrufen, die ihnen als Argument übergeben wurden)

    Ja, sollte aber eigentlich auch in den FAQ stehen. Ansonsten TC++PL oder ähnliche als Referenz zu Rate ziehen.



  • @Dumpfie: Jo, steht drin... hier: http://www.c-plusplus.net/forum/viewtopic.php?t=39451



  • Aha, danke



  • Je nachdem, was du machen willst könnte boost::lambda vielleicht hilfreich sein.


Anmelden zum Antworten