Boost logo

Boost Users :

Subject: [Boost-users] BOOST_FOREACH question
From: Zachary Turner (divisortheory_at_[hidden])
Date: 2009-06-17 18:20:53


Suppose I've got a concrete instance C of some class, and a pair of
iterators X and Y representing a range [X, Y). I want to do the
following:

int a, b, c;
while (X != Y)
{
   C.foo(*X, a, b, c);
   ++X;
}

I can type it out like that, but actually X and Y are zip_iterators,
and it's hard for me to figure out how to parameterize the
zip_iterator to instantiate it. I tried the following:

class EncoderService
{

     boost::asio::io_service work_io_service_;

void async_encode(std::vector<const_buffer> inputs,
std::vector<mutable_buffer> outputs)
{
     BOOST_ASSERT(s.size() == t.size());

     std::for_each(
          boost::make_zip_iterator(boost::make_tuple(inputs.begin(),
outputs.begin())),
          boost::make_zip_iterator(boost::make_tuple(inputs.end(),
outputs.end())),
          boost::bind(
               &boost::asio::io_service::post,
               &work_io_service_,
               boost::bind(
                    &EncoderService::encode_handler,
                    this)));
}

void encode_handler(const boost::tuple<const_buffer, mutable_buffer>& buffers)
{
}

};

If I do this I get tons of errors. I'm probably just doing something
stupid. Even still the for_each is already complicated and kind of
hard to read, I feel like there should be a one or two-liner to do
this :(

the io_service::post() function simply calls encode_handler() on
another thread.

I'm thinking it might just be easier to walk each sequence manually,
but at some point I was hoping to templatize the async_encode()
function rather than have it take vectors.


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