Boost-Funktion und boost bind: Binden Sie den Rückgabewert?

Dies ist im Zusammenhang mit dieser vorhergehenden Frage: Mit boost::bind, boost::function: abrufen der gebundenen variable Typ.

Kann ich binden, eine Funktion wie diese:

in .h:

class MyClass
{
    void foo(int a);
    void bar();
    void execute(char* param);
    int _myint;
}

in .cpp

MyClass::bar()
{
    vector<boost::function<void(void)> myVector;
    myVector.push_back(boost::bind(&MyClass::foo, this, MyClass::_myint);
}
MyClass::execute(char* param)
{
    boost::function<void(void)> f  = myVector[0];
    _myint = atoi(param);
    f();
}

Aber wie kann ich binden einen Wert zurück ? also:

in .h:

class MyClass
{
    double foo(int a);
    void bar();
    void execute(char* param);
    int _myint;
    double _mydouble;
}

in .cpp

MyClass::bar()
{
    vector<boost::function<void(void)> myVector;
    //PROBLEM IS HERE: HOW DO I BIND "_mydouble"
    myVector.push_back(boost::bind<double>(&MyClass::foo, this, MyClass::_myint);
}
MyClass::execute(char* param)
{
    double returnval;
    boost::function<void(void)> f  = myVector[0];
    _myint = atoi(param);
    //THIS DOES NOT WORK: cannot convert 'void' to 'double'
    //returnval = f();
    //MAYBE THIS WOULD IF I COULD BIND...:
    //returnval = _mydouble;

}
  • Sie haben eine function<void(void)> -- wo erwarten Sie ein double zu kommen, in diese überhaupt? Wenn Sie möchten, eine nullary function<> gibt eine double versuchen function<double()>...
  • Blick auf die Letzte Zeile des bar Funktion, das ist wie das input-argument gebunden ist, die Funktion Typ ist gelöscht und wird function<void(void>> aber _myint ist noch verlinkt.. ich will das gleiche für den Rückgabewert. Der Punkt ist, um in der Lage zu speichern, die boost::Funktionen in den gleichen Vektor 😉
  • Aber Sie haben ausdrücklich angegeben, dass Sie wollen void als Rückgabewert (function<void(void)>); entweder Sie wollen void oder möchten Sie double Sie können nicht beides haben.
  • Ich Stimme zu, dass returnval = f(); nicht funktionieren sollte, aber es sollte ein Weg gefunden werden, binden Sie den Rückgabewert, so wie es auch eine Möglichkeit zum binden der input-Wert...
  • Nein, Zu Steigern.Binden bindet Funktionen und Parameter. Die Ausführung der Funktion und der resultierende Rückgabe eines Wertes ist genau das gleiche wie wenn Sie aufgerufen, eine reguläre Funktion.
InformationsquelleAutor Smash | 2011-10-31
Schreibe einen Kommentar