Variable für Funktionsaufruf



  • Ich möchte gerne einen Funktionsaufruf bzw. die Adresse der Funktion in einer Variablen speichern,
    um diese später ausführen zu können.
    Grund: ich möchte nicht zehn verschiedene Klassen definieren müssen, die überwiegend eigentlich alle dasgleiche tun,
    nur in einigen Fällen müssen an einer Stelle noch spezielle Berechnungen durchgeführt werden.
    Nur weil es sich um verschiedene Hauptprogramme handelt, die getrennt voneinander kompiliert werden,
    kann ich diese Funktionalitäten nicht direkt in diese Klasse stecken und über "if" oder "switch" abfragen.
    Deshalb mein Gedanke mit einer Variablen.
    Geht das ? Wenn ja, wie ?
    (ich weiss, dass dies nicht der reinen Lehre von C++ entspricht,
    aber unter Windows geht dies sehr gut. Vielleicht gibt es ja auch
    eine Lösung unter Linux mit g++)

    Beispiel:
    void *proc_var; //hier soll der Funktionsaufruf gespeichert werden

    void test_proc1(void)
    {
    //hier werden verschiedene Berechnungen durchgeführt und einiges gespeichert
    }

    void test_proc2(void)
    {
    //hier werden verschiedene Berechnungen durchgeführt und einiges gespeichert
    }

    ...
    proc_var=0;

    oder

    proc_var=&test_proc1;
    oder
    proc_var=&test_proc2;
    ...

    void Hauptfenster::proc(void)
    {
    // verschiedenes

    if (proc_var!=0) proc_var(); //Ausführung des Programms auf das die Variable verweist

    }



  • malabarista schrieb:

    Geht das ? Wenn ja, wie ?

    "Zeiger auf Funktionen". Sollte in jedem Buch über C-Programmierung stehen, und wird auch von der Standardbibliothek verwendet (man qsort, zB). Bei dir müsste das irgendwie so aussenen: void (*funk)(void).

    Das hat allesdings eher nichts mit Linux zu tun.



  • Daniel E. schrieb:

    Das hat allesdings eher nichts mit Linux zu tun.

    Sehe ich genauso.



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • alles klar: ich hatte eine falsche pointer-definition und kam deswegen nicht klar.


Anmelden zum Antworten