Funktion als Parameter

Dieses Thema im Forum "Mac OS Entwickler, Programmierer" wurde erstellt von Reimer, 11.04.2008.

  1. Reimer

    Reimer Thread Starter MacUser Mitglied

    Beiträge:
    327
    Zustimmungen:
    3
    Mitglied seit:
    01.06.2007
    Hiho.

    wollte mal wissen, wie ich ne Member-Funktion als Parameter übergebe?

    Bisher war stepCallback aus dem unteren Abschnitt als Klassen-Funktion definiert, ich mußte das allerdings ändern. Jetzt moniert der Compiler einen undefinierten Datentyp (2. Zeile). Ich hoffe die 4 (relevanten) Code-Zeilen reichen, um mein Problem zu schildern...

    Code:
    static void stepCallback(void* userData);
    quartzModuleWithTowerCom = new PC_qt(this, this->stepCallback, this);
    
    
    typedef void (*cycleCallback_t) (void* userData); 
    PC_qt(QObject *parent, cycleCallback_t cycleCallback, void* userData);
    
    Da ich mich erst vor kurzem in C++ reingearbeitet habe (und aus der Java-Welt komme), steh ich erstmal auf dem Schlauch.
     
  2. _ebm_

    _ebm_ MacUser Mitglied

    Beiträge:
    2.076
    Zustimmungen:
    202
    Mitglied seit:
    19.01.2008
    Was genau willst du damit erreichen? Für mich sieht das etwas krude aus. Parameter einer Funktion sind imho immer Datentypen, also keine Funktionen. Du kannst Methoden verwenden, um deren Rückgabetyp an eine Funktion zurückzugeben. Das war aber auch bei Java schon so.

    Der Compiler moniert das zu recht, denn den Datentypen stepCallback gibt es aber nicht als Klassenvariable in dieser Klasse.

    Technisch geht folgendes:
    Code:
    class Fooclass
    {
    int foo();
    void bar(int myVar);
    }
    
    Fooclass myfoo = new Fooclass();
    myfoo->bar(myfoo->foo());
    
    Funktionen sind keine Datenstrukturen sondern stehen nur in einer dem Objekt anhängigen Liste..
     
  3. below

    below MacUser Mitglied

    Beiträge:
    13.297
    Zustimmungen:
    1.087
    Mitglied seit:
    15.03.2004
    @Reimer: Du hast heute Nacht gerade mal drei Minuten gewartet, bis Du diese Frage in einem anderen Forum gecrosspostet hast.

    Hättest Du nicht mal warten können, bis wir morgens Tee getrunken haben und die Foren auf neue Beiträge prüfen?

    Crossposts sind böse.

    Alex
     
  4. Reimer

    Reimer Thread Starter MacUser Mitglied

    Beiträge:
    327
    Zustimmungen:
    3
    Mitglied seit:
    01.06.2007
    @below: notiert. Kommt nicht mehr vor, aber macuser-Leser lesen nicht zwingend das osxentwickler-Forum oder sind beide Foren miteinander gekoppelt? Lass mich eines besseren belehren ;-)

    @_ebm_: Der angegebene Code funktioniert, das ist korrekt. stepCallback dürfte nicht mehr static sein. Da ich ohnehin noch nie mit Funktionen als Parameter gearbeitet habe, werde ich da mal diverse Varianten ausprobieren müssen.

    Nachtrag:
    Die jeweils 2 gruppierten Zeilen stehen jeweils in unterschiedlichen Definitionen bzw. in deren Implementierungen. Ich wollte den Beitrag nicht unnötig aufblähen lassen.
     
  5. _ebm_

    _ebm_ MacUser Mitglied

    Beiträge:
    2.076
    Zustimmungen:
    202
    Mitglied seit:
    19.01.2008
    Dir gehts also um Callback-Functions und Function-Pointer?
     
  6. below

    below MacUser Mitglied

    Beiträge:
    13.297
    Zustimmungen:
    1.087
    Mitglied seit:
    15.03.2004
    Ganz offensichtlich ist die Gruppe größer als Null.

    Alex
     
  7. Fabi_K

    Fabi_K MacUser Mitglied

    Beiträge:
    175
    Zustimmungen:
    8
    Mitglied seit:
    04.05.2007
    Naben,

    hab jetzt von C++ kaum Ahnung, aber wenn es mit Funktionpointern nicht klappt, probier es doch mal den OOP-Weg.

    Javamäßiger Code:
    Code:
    public class CycleCallback {
    
        public void callbackCaller(CycleCallback callback) {
            // ...
            callback.callbackCaller(this);
            // ...
        }
    
    }
    Prost.
     
  8. Zapfenzieher

    Zapfenzieher MacUser Mitglied

    Beiträge:
    355
    Zustimmungen:
    20
    Mitglied seit:
    31.01.2007
Die Seite wird geladen...

Diese Seite empfehlen