boost::bind and overloaded functions.



  • Hi,

    ich bin gerade dabei etwas zu programmieren.
    Dabei habe ich folgende Struktur:

    main.cpp

    void A(int a, string *b) {
    //foo
    }
    
    void A(int a, std::vector<string*> *b) {
    //foo
    }
    
    int main() {
    string st = "hallo";
    string *ptr_st = st;
    
    int i = 12;
    int *ptr_i = i;
    
    boost::bind(A, ptr_i, ptr_st);
    
    //...
    }
    

    Dabei bekomme ich einen "invalid overload" error.
    Soweit klar, dass bind nicht weiß, an welche Funktion er binden soll.

    Unter: http://www.boost.org/doc/libs/1_55_0/libs/bind/bind.html (Binding an overloaded function) steht ja eigentlich auch die Lösung zu dem Problem:

    boost::bind( static_cast< int (CLASS::*) ()>( &CLASS::FUNCTION ), _1 );
    

    nur leider weiß ich nicht wohin ich casten soll, da meine beiden Funktionen ja nicht in einer Klasse gekapselt sind, sondern in der selben cpp Datei, wie auch die main.

    Habt ihr 'nen Schimmer, wie ich aus der Sache heile rauskomme?



  • boost::bind(static_cast <void (*)(int, std::string*)> (&A), i, ptr_st);
    

    Der code hat aber noch ein paar mehr Probleme als das.



  • danke, funktioniert.
    Ich weiss um die anderen Probleme. 🙂



  • Für den Fall, dass Du das noch nicht kennen solltest: Das ist eigentlich eine Situation, wo C++11 Lambdas viel praktischer sind:

    [=]{A(i,ptr_st);}
    

Log in to reply