Boost logo

Boost :

From: Joel de Guzman (joel_at_[hidden])
Date: 2006-05-17 02:10:44


Larry Evans wrote:
> In boost/fusion/.../list/detail/at_impl.hpp
>
> the apply is recursive; however, the only reason for the
> recursion is to "find the right element type". The other
> reason for apply is the same as that of the apply
> in.../vector/detail/at_impl.hpp. "find the right element
> type" in vector's at_impl is done with mpl::at. The
> similarity between list and vector at_impl would be more
> apparent if:
>
> template <typename Sequence, int N>
> struct elem_at_c
> {
> typedef typename
> mpl::eval_if<
> mpl::bool_<N == 0>
> , mpl::identity<typename Sequence::car_type>
> , elem_at_c<typename Sequence::cdr_type, N-1>
> >::type
> type;
> };
>
> were used to find the right element type. Then the frist part of
> list::at_impl::apply would be:
>
> template <typename Sequence, typename N>
> struct apply
> {
> typedef elem_at_c<Sequence, N::value> element;
> typedef typename
> mpl::eval_if<
> is_const<Sequence>
> , detail::cref_result<element>
> , detail::ref_result<element>
> >::type
> type;
>
> which is very similar to the counterpart in vector:
>
> template <typename Sequence, typename N>
> struct apply
> {
> typedef mpl::at<typename Sequence::types, N> element;
> typedef typename
> mpl::eval_if<
> is_const<Sequence>
> , detail::cref_result<element>
> , detail::ref_result<element>
> >::type
> type;

Looks good to me. Do you have a patch?

Regards,

-- 
Joel de Guzman
http://www.boost-consulting.com
http://spirit.sf.net

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk