Callback-Funktion mit boost::function



  • Hallo Gemeinde,

    ich mache gerade einen Test für eine Callback-Funktion mit boost::function, jedoch habe ich das Problem, das die Funktions-Signatur irgendwie nicht übereinstimmt. Jedoch kann ich den Fehler nicht finden.

    #include <boost/function.hpp> 
    #include <iostream> 
    
    void testCallback(int i)
    {
    	std::cout << "Callback uebergeben: " << i << std::endl;
    }
    
    void run(int a, void (*callback)(int))
    {
    	callback(a);
    }
    
    int main() 
    { 
    	boost::function<void (int)> f = testCallback;
            f(4);
    	run(5, f);
    
    	return 0;
    }
    

    Wenn ich in der "run" funktion statt f testCallback rein schreibe, funktioniert alles. Aber mit boost::function klappt das irgendwie nicht.

    Hat da jemand einen Tipp für mich, was daran falsch ist?

    Die Fehlermeldung:

    'run': Konvertierung des Parameters 2 von 'boost::function<Signature>' in 'void (__cdecl *)(int)' nicht möglich
    1> with
    1> [
    1> Signature=void (int)
    1> ]
    1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden

    Also laug Fehlermeldung stimmt meine Signature von boost::function nicht. Jedoch funktioniet der aufruf "f(4)"

    Bin für jeden Tipp dankbar.

    so long
    jd



  • "run" muss als zweiten Parameter auch den Typ "boost::function<void(int)>" verlangen, bzw eine const-Referenz darauf. boost::function ist zu komplex, um es auf einen einfachen Funktionszeiger abbilden zu können.



  • Super, danke so funktioniert das.

    PS: Jetzt funktioniert das auch mit boost::bind 🙂

    danke.


Anmelden zum Antworten