Boost logo

Boost Users :

Subject: Re: [Boost-users] [Bind?] Returning generators instead of evaluating.
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2011-10-19 05:23:36


On Tue, Oct 18, 2011 at 3:54 PM, Vicente Botet <vicente.botet_at_[hidden]>wrote:

>
> How is make_generator different from bind?
> Why
>
> function<T()> g = bind(f,v);
>
> Doesn't works for you?
>
>
Hi Vicente

Thanks for answering. My initial response was "Doh, I've asked a really
stupid question here.", which may still
be true! But walk a little with me on this...

In this code sequence

#include <vector>
#include <iostream>
#include "boost/assign/std/vector.hpp"
#include "boost/function.hpp"
#include "boost/bind.hpp"

using boost::function;
using boost::bind;

void do_it( function<void()> f ) { f( ); }

void print( int i ) { std::cout << i << std::endl; }

template <typename T, typename T1> function<T( )> make_generator(
function<T(T1)> f, T1 t1 ) { return bind( f, t1 ); }
template <typename T, typename T1, typename T2> function<T( )>
make_generator( function<T(T1, T2)> f, T1 t1, T2 t2 ) { return bind( f, t1,
t2 ); }
template <typename T, typename T1, typename T2, typename T3> function<T( )>
make_generator( function<T(T1, T2, T3)> f, T1 t1, T2 t2, T3 t3 ) { return
bind( f, t1, t2, t3 ); }
// ...etc...

int main( )
{
    using namespace boost::assign;

    std::vector<int> v;
    v += 1,2,3,4,5,6,7;

    for_each( v.begin(), v.end(), bind( do_it, bind( make_generator<void,
int>, print, _1 ) ));
}

...how would you write the final for_each using bind directly, given that
the other
interfaces are fixed? I think you'd need to specify the exact types taken
and returned by bind, which are less than convenient to work with.

So I think the answer to 'doesn't bind work for me?', is no, because I'd
like
specify the template instantiation types in a more convenient way.

That may all be a load of gibberish - I'm feeling my way a bit here!

Also, if my function signature handling skills were better, it might be
better to specify
the template parameter(s) of make_generator as a function signature or MPL
type
list.

Thx, Rob.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net