TForm memeberfunktion als argument übergeben



  • Hi, also ich möchte eine callback funktion einrichten und natürlich etwas genereller als Vcl, jetzt hab eich den typ void (*Func) ( std::string ) und möchte dort eine member funktion meiner form rein.

    public:		// User declarations
           void FormUpdate(string);
    
    Chat->setCallback(TForm1::FormUpdate);
    
    void setCallback ( void (*Func) ( std::string ) ){ Callback = Func; }
    
    void (*Callback) ( std::string );
    

    nur bringt er jetzt nen conversion error.

    [C++ Error] Unit1.cpp(19): E2034 Cannot convert 'void (* (_closure )(string))(string)' to 'void (*)(string)'
    

    und ich weiß nicht wirklich wie ich jetzt noch casten soll :|



  • Das geht so nicht. Memberfunktionen haben eine andere Signatur als freie Funktionen. Da wird implizit der this-Zeiger mit übergeben.
    Wenn deine Memberfunktion keinen Zugriff auf die Klasseninternas braucht kannst du sie static machen, dann geht das.
    Besser wäre es wohl, statt der Memberfunktion einen Zeiger auf die Klasseninstanz zu übergeben. Da kann man einen void* Pointer nehmen (gefährlich) oder einen Zeiger auf TForm (Basisklasse). Dann musst innerhalb deiner Funktion noch entsprechnend casten.
    Oder du übergibst als CallbackFunktion eine freie Funktion die wiederum diesen TForm-Zeiger als Parameter hat.


Anmelden zum Antworten