Mathias Gaunard wrote:
Le 03/08/2010 15:35, Wolfram Brenig a écrit :
Hi,
as a casual/newbie boost-user I'm trying to come to grips with why/when nested functional composition with boost::bind might be of help - following Karlsson's book, in its fifth printing.
---------------------- 1) It seems that he suggests, that if one is into doing something like
T faa(int); T foo(const& T);
int i; vector<T> v(10); // container for(i=0; i<10; i++) { v[i] = faa(i); // set it v[i] = foo(v[i]); // operate on it }
then instead of the 'old style' for-loops it would be more desirable to use 'STL style' algorithms with the functors created from boost::bind, say like
transform(v.begin(),v.end(),boost::bind(&foo,_1));
You might as well write boost::transform(v, foo);
But, personally, since that's a fairly trivial algorithm, I don't find that much more interesting than foreach(int& i, v) i = foo(i);
There are other situations, though, where using higher-order programming really shines.
2) Then, it is suggested furthermore that if foo() is a (simple?) nested function, say T=double and,
double foo(double x) { return 2*x; }
then one should do 'functional composition', i.e. create the functor for the previous point 1) by
boost::bind(std::multiplies<double>(),2,_1)
Replace all that by just 2*_1
Huh, with which lib? Is _1 in the global namespace, or is this assuming a using namespace? Thanks, Jeff