Boost logo

Boost Users :

Subject: Re: [Boost-users] [ptr_container] Const & non-const ptr_map iteration over mapped values
From: Rodolfo Federico Gamarra (rgamarra_at_[hidden])
Date: 2009-06-15 11:45:46


Hi Thorsten,

Thanks a lot for your reply.

> I would just implement this as (abbreviated)
>
> template< class R >
> struct X
> {
> template< class Pair >
> R operator()( const Pair& p ) const { return *p.second; }
> };

umm ... yep, you're right: the T1 and T2 types weren't used in my
original alternative. Your struct X needs, tough, the result_type
nested typedef (maybe that's why you said "abbreviated").

> Well, why do you want to define that typedef, when it is easier to infer
> the type automatically?

Yep, it's easier and shorter; but this came so as to to fulfill C++
standard requirements over an "unary function" (as of my
understanding). Nevertheless, it seems that (at least in this case)
Boost's requirements are weaker, without requiring this other nested
typedef.

> Why? Dont map::value_type v = *m.find(x) work?

Well, yes: at first, this came as a result of the last point: it the
arg_type has to be provided (if it has...), then a function template
is a no-go alternative. So, an specifically typed function has to be
defined: what's the arg_type? The "detail" type shouldn't be used one,
and a std::pair didn't work due to the lack of implicit conversion.
Then I saw the other nested template typedefs (const_reference and
reference). But the question of the to std::pair remainded: does it
help with interoperability with code that worked on maps that used the
standard std::pair? Is it free to provide it, or there's some
impossibility?

> Again, why do you want to do this?

For the aforementioned reasons, but as you pointed that template
parameter wasn't actually needed. Anyway, seemed reasonable to have it
provided by ptr_map.

Thanks a lot again. Cheers.

Rodolfo.


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