KlassenMethoden-Zeiger auf nicht statische Methode ??



  • Hi Folks !!!

    Ja die frage steht eigentlich schon oben. Ich habe mir eine Multithreading-Klasse für Windows und Linux angelegt, welche wunderbar funktioniert. Momentan benutze ich eine Virtual-Funktion für die "Callback". Ich möchte aber gern eine Funktion einer Klasse nutzen. Ich habe verschiedene Dinge ausprobiert, aber keins davon war wirklich zufriedenstellend. Habt Ihr irgendwelche Ideen?? Schönen Dank mal im voraus!!

    rya.
    Scorcher



  • Schau dir mal boost::bind an!



  • Danke, das könnte funktionieren, aber kennt jemand vielleicht noch ne möglichkeit das mit einem Typedef oder anders zu lösen?? Die boost library ist nämlich leider bei meinem VC2003 Weltmeister im Warnungen generieren, da ich immer auf W4 mit WarningsAsErrors arbeite. Deswegen benutze ich auch nicht die SignalLib, mit der das auch gehen würde....
    rya.
    Scorcher24



  • Schau in die FAQ, da steht auch was dazu.
    Es geht auch ohne boost::bind.



  • phlox81 schrieb:

    Es geht auch ohne boost::bind.

    Irgendwie muss Boost das ja auch implementiert haben 😉

    MfG SideWinder



  • Ich habe verschiedene Dinge ausprobiert

    Welche?

    aber keins davon war wirklich zufriedenstellend.

    Warum?



  • Methoden die ich bis jetzt benutzt habe:

    virtuelle methoden:
    Wenn man mehr als einen Thread innerhalb eines Objekts habe möchte, braucht man erst eine friend-Klasse, bzw eine zweite die die Methoden überschreibt.

    C-Stle-Callback:
    Der Funktion könnte man einen Zeiger übergeben und Sie als friend deklarieren, um auf private Methode zuzugreifen.

    boost::signal
    Der Nachteil hierbei ist, dass die signal-lib unbedingt einen operator() braucht. Das heisst, ich muss wieder ne extra Klasse anlegen für einen zweiten Thread. Ausserdem erhöht boost die Abhängigkeiten der Header und generiert haufenweise warnungen. Was ich noch nicht gesagt habe: es geht hier um ein spiel. Seit ich boost::signal verwende, ist die framerate um 30% eingebrochen (Es wurde an der Darstellung nix geändert). Das ist nicht akzeptabel.

    Static Zeiger:
    Bei static hat man das Problem, dass es keinen this zeiger gibt, also auf Mitglieder und Methoden nicht zugegriffen werden kann - gut man kann hier wieder einen Zeiger übergeben.

    Ich würde halt wie gesagt nur gern wissen, ob es auch anders geht. Kann man nicht irgendwie eine Basisklasse deklarieren und das dann mit nem Typedef lösen ??

    class CObject
    {
    CObject();
    virtual ~CObject();
    void ThreadFunction();
    };
     typedef void (CObject::ThreadFunction);
    

    Das ist nur mal Pseudocode wie ich es mir mal vorgestellt habe. Ähnliche Versuche endeten mit Fehlern.

    rya.
    Scorcher24


Anmelden zum Antworten