Boost logo

Boost Users :

From: Matt S Trentini (matt_s_trentini_at_[hidden])
Date: 2003-11-27 19:01:46


Peter Dimov wrote:

> When you construct a boost::function from &HandleClass::handle, what
> actually gets stored is boost::mem_fn(&HandleClass::handle). See
>
> http://www.boost.org/libs/mem_fn/
>
> Even
>
> std::vector< boost::shared_ptr<HandleClass> > listOfHcs;
>
> will work.

Thanks Peter, makes sense after reading that documentation now.

I've actually got another question - I'd really prefer to replace
ReturnContainer with an output iterator type. So Extract would look
like this:

     template
     <
         class InIterator,
        class OutIterator,
>
     void Extract(const InIterator & itBegin,
                  const InIterator & itEnd,
                  OutIterator & itOut,
                  boost::function1<OutIterator::value_type,
FwdIterator::value_type> f)
     {
         for (FwdIterator it = itBegin ;it != itEnd; ++it)
         {
             *itOut++ = f(*it);
         }
     };

And then you'd typically call Extract with an inserter:

     Extract(listOfHcs.begin(), listOfHcs.end(),
back_inserter(needToFill), &HandleClass::handle);

But this doesn't compile because the inserters (at least on my platform)
don't define value_type. I'd prefer to take an iterator because it
gives greater flexibility (can use inserter, front_inserter or
back_inserter) and it more closely models the standard algorithms.
However, I need to know the return type of the function and I can't see
any way to get it without specifying it as a template parameter.

Actually, I think I could use the typedefs that are defined in the
inserters to retrieve the container, and then the value type, but this
then forces the client to use inserters.

Am I overlooking something here?

Cheers,
Matt


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