Question

I am trying to use boost::function with instance methods using the following example

class someclass
{
public:

    int DoIt(float f, std::string s1)
    {
        return 0;
    }

    int test(boost::function<int(float, std::string)> funct)
    {
         //Funct should be pointing to DoIt method here
         funct(12,"SomeStringToPass");
    }

    void caller()
    {
                test(DoIt); //Error : 'someclass::DoIt': function call missing argument list; use '&someclass::DoIt' to create a pointer to member
    }
};

Any suggestion on how I could resolve this issue ?

Was it helpful?

Solution

You should use boost::bind:

#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <string>
#include <iostream>

using namespace std;

class someclass
{
public:

    int DoIt(float f, std::string s1)
    {
        return 0;
    }

    int test(boost::function<int(float, std::string)> funct)
    {
        return funct(5.0, "hello");
    }

    void caller()
    {
        cout << test(boost::bind(&someclass::DoIt, this, _1, _2)) << endl;
    }
};

int main() {
    someclass s;
    s.caller();
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top