David Abrahams wrote: > Well I hope that was all instructive, but it was probably way more > complicated than neccessary. I think it would actually be far superior > to build a solution around an mpl iterator adaptor like this one: > > template <class IteratorSeq> struct zip_iterator > { > typedef typename mpl::transform< > IteratorSeq,mpl::apply0<mpl::_1> > >::type type; > > typedef zip_iterator< > typename mpl::transform< > IteratorSeq,mpl::next<mpl::_1> > >::type > > next; > }; > > and an operator adaptor like this one (don't know how to generalize > this one to N arguments yet): > > template <class Op, class Seq> > struct binop_adaptor > : mpl::apply2< > Op > , typename mpl::begin<Seq>::type > , typename mpl::next<mpl::begin<Seq>::type>::type > > > { > }; > > How about that?
To finish the sketch: template< typename Sequences > struct zip_view { typedef typename transform< Sequences, begin<_1> >::type first_ones_; typedef typename transform< Sequences, end<_1> >::type last_ones_; typedef nested_begin_end_tag tag; typedef zip_iterator<first_ones_> begin; typedef zip_iterator<last_ones_> end; }; // corrected 'binop_adaptor' template< typename BinaryOp > struct apply_two_args_seq { template< typename Args > struct apply : apply2< BinaryOp , typename at_c<Args,0>::type , typename at_c<Args,1>::type > { }; }; // user code typedef range_c<int,0,10> s1; typedef range_c<int,10,20> s2; typedef transform_view< zip_view< list<s1,s2> > , apply_two_args_seq< plus<> > > result; // here! BOOST_STATIC_ASSERT((equal< result , filter_view< range_c<int,10,30>, math::is_even<_> > , equal_to<_,_> >::type::value)); The 'zip_view' is in the CVS, as well as the rest of the sample - http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/m pl/test/zip_view.cpp. 'apply_two_args_seq' needs generalization, so it didn't go into a header. Note that the sample doesn't work on all the supported compilers yet. Aleksey _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost