|
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