#include <iostream>
#include <vector>
#include <string>
#include <ostream>
#include <algorithm>
#include <boost/function.hpp>
using namespace std;
class some_class
{
public:
void do_stuff(int i) const
{
cout << "some_class i: " << i << endl;
}
};
class other_class
{
public:
void operator()(int i) const
{
cout << "other_class i: " << i << endl;
}
};
int main() {
// CASE ONE
boost::function<void (some_class, int) > f;
// initilize f with a member function of some_class
f = &some_class::do_stuff;
// pass an instance of some_class in order to access class member
f(some_class(), 5);
// CASE TWO
boost::function<void (int) > f2;
// initialize f2 with a function object of other_class
f2 = other_class();
// Note: directly call the operator member function without
// providing an instance of other_class
f2(10);
}
// output
~/Documents/C++/boost $ ./p327
some_class i: 5
other_class i: 10
Question> When we call a function object through boost::function, why we don’t have to provide an instance to the class in order to call this class member function?
Is it because that we have provided such information through the following line?
f2 = other_class();
You do have to provide an instance to the class, and you are providing one.
This constructs an
other_classobject, and assigns that object tof2.boost::functionthen copies that object, so that by the time you try to call it, you don’t need to instantiate it a second time.