"David Abrahams" <[EMAIL PROTECTED]> wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... > Consider applying the fold algorithm to the first sequence, using an > adapted binary operation, something like: > > // ***** Untested! ******** > > // A dummy iterator that prevents us running off the end of the RHS sequence > template <class T> > struct prefix_iter > { > typedef T next; > }; > > template <class binop, class accum = mpl::push_back<mpl::_,mpl::_> > > struct zip_op > { > template <class L, class ResultIterPair> > struct apply > { > // pre-increment the rhs iterator > typedef typename ResultIterPair::second_type::next rhs_iter; > > // Dereference the rhs iterator to get the rhs value > typedef typename rhs_iter::type rhs; > > // x = binop(L,rhs) > typedef typename mpl::apply2<binop,L,rhs>::type x; > > // Get the result of the previous step > typedef typename ResultIterPair::first_type prev_result; > > // accumulate x with that result. > typedef typename mpl::apply2<accum,prev_result,x>::type result; > > // Finally, the return type > typedef std::pair<rhs_iter,result> type; > }; > }; > > typedef mpl::fold<LhsSequence, zip_op<BinaryOperation> > , std::pair<mpl::begin<RhsSequence>::type,mpl::vector<> > >::type::second_type answer; >
I tinkered with it a bit: template <class binop> struct zip_op { template <class ResultIterPair, class LHS_type> struct apply { typedef typename ResultIterPair::first_type prev_rhs_iter; typedef typename ResultIterPair::second_type prev_result; typedef typename prev_rhs_iter::type prev_rhs; typedef typename mpl::apply2<binop,LHS_type,prev_rhs>::type interim_result; typedef typename mpl::insert<prev_result,typename mpl::end<prev_result>::typ e,interim_result>::type result; typedef typename prev_rhs_iter::next next_rhs_iter; typedef std::pair<next_rhs_iter,result> type; }; }; // user: //typedef mpl::vector<...> lhs_seq; //typedef mpl::vector<...> rhs_seq; typedef mpl::fold< lhs_seq , std::pair<mpl::begin<rhs_seq>::type,mpl::vector<> > , zip_op<BinaryOp> >type::second_type answer; Works cool, thanks :-) _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost