|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2002-09-05 13:44:58
From: "Yitzhak Sapir" <yitzhaks_at_[hidden]>
> From: David Abrahams [mailto:dave_at_[hidden]]
> Sent: Thursday, September 05, 2002 8:05 PM
> To: boost_at_[hidden]
> Subject: Re: [boost] iterator adaptors and operator[]
> I've been using a trick in the Boost.Python library which
> might apply here:
>
> template <class T, class Result>
> struct dependent {
> typedef Result type;
> };
>
> now you can use dependent<T,X>::type to declare a return type
> of X which is
> dependent on a template parameter of the function, e.g.:
>
> typename dependent<Policies,value_type>::type
> operator[](difference_type
> n) {
> ...
> }
>
> This trick is also nice for breaking #include dependencies, since the
> definition of X isn't needed in order to use it.
>
> If OP tries this and it works for his problem I'd be happy to accept a
> patch.
<<It doesn't work. I suppose that is because when it gets to operator[] it
already knows what Policies and value_type both are. Maybe it would work
in a templated function, but I can't see why any other parameter other than
Policies would make it work in this case.>>
I was afraid of that. You could add a template parameter for the
difference_type in operator[]().
<<The attached patch solves it using inheritance (operator[] is inherited,
with the inherited class chosen based on Category), but is much more
complex than the above trick would have been.>>
Does it pass all the regression tests?
<<In testing this against cvs, I had problems that the preprocessor lib was
including stuff from preprocessor/detail in, for example, inc.hpp, and
those were being used in alignment_traits.hpp. The cvs didn't have a
preprocessor/detail however.>>
Oh. Paul, what's the deal?
-----------------------------------------------------------
David Abrahams * Boost Consulting
dave_at_[hidden] * http://www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk