|
Boost Users : |
From: David Abrahams (dave_at_[hidden])
Date: 2003-04-16 09:22:48
"Kris Braun" <kbraun_at_[hidden]> writes:
> Hi there,
>
> I could really use the features provided by iterator adaptors part of
> the library, but I'm having a lot of trouble getting a nested set of
> adaptors to compile. In one case, I'd like to return an iterator into
> std::map< std::string, boost::shared_ptr< ApiOption > >, and have it
> return references to options in which option->isTemplate( ) is false.
> Conceptually, I'd like a filter_iterator->indirect_iterator-
>>projection_iterator chain.
> I've been using this typedef to project onto the second member of the
> pair:
> typedef boost::projection_iterator_pair_generator<
> select_second< std::string, boost::shared_ptr< ApiOption > >,
^^^^^^^^^^^^^
Where is select_second defined with two template parameters?
> OptionMap::iterator,
> OptionMap::const_iterator > OptionMapIterators;
Do you need both const and non-const iterators? If not, the
pair_generator is probably overkill.
> but I've been at a loss to add indirect_iterator and filter_iterator
> into the mix. Can anyone help me get unstuck?
I can't really tell what's going on here, but it looks like you
haven't got step 1 right. Maybe you should try to compile a test
program that just uses the projection you want.
Also, I don't think the existing iterator adaptor fulfills its promise
to work properly with smart pointers. I am sure that you can do it
(and more easily too) using the sandbox iterator adaptors if that's
an option for you.
// untested
filter_iterator<
std::logical_not<
boost::mem_fun_ref_t<bool, &ApiOption::isTemplate>
>
, indirect_iterator<
transform_iterator<
select_second<boost::shared_ptr<ApiOption> >
, OptionMap::iterator>
>
>
>
HTH,
-- Dave Abrahams Boost Consulting www.boost-consulting.com
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