Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you pass boost::bind objects to a function?

Tags:

c++

boost-bind

I have a one-dimensional function minimizer. Right now I'm passing it function pointers. However many functions have multiple parameters, some of which are held fixed. I have implemented this using functors like so

template <class T>
minimize(T &f) {
}

Functor f(param1, param2);
minimize<Functor>(f);

However the functor definition has lots of crud. Boost::bind looks cleaner. So that I could do:

minimize(boost:bind(f,_1,param1,param2))

However I'm not clear what my minimize declaration should like like using boost::bind. What type of object is boost::bind? Is there an easy pattern for this that avoids the boilerplate of functors but allows multiple parameter binding?

like image 544
Tristan Avatar asked Jun 25 '09 15:06

Tristan


1 Answers

You can just use boost::function. I think boost::bind does have its own return type, but that is compatible with boost::function. Typical use is to make a typedef for the function:

typedef boost::function<bool(std::string)> MyTestFunction;

and then you can pass any compatible function with boost::bind:

bool SomeFunction(int i, std::string s) { return true; }
MyTestFunction f = boost::bind(SomeFunction, 42, _1);
f("and then call it.");

I hope that is what you want.

It also works with methods by passing the this pointer for the call as second parameter to boost::bind.

like image 127
OregonGhost Avatar answered Sep 20 '22 15:09

OregonGhost