Boost logo

Boost Users :

From: Roman Perepelitsa (roman.perepelitsa_at_[hidden])
Date: 2007-11-21 03:20:55


Hello,

I need metafunction cross_product, which should
transform 2 sequences to a sequence of pairs.

Example:

typedef list<int, char> l1;
typedef list<int *, char *> l2;
typedef cross_product<l1, l2>::type c;
typedef list<
    pair<int, int *>,
    pair<int, char *>,
    pair<char, int *>,
    pair<char, char *>
> e;
BOOST_MPL_ASSERT((equal<c, e>));

The best definition I came up with is the
following:

template <class T, class R>
struct product : transform<R, pair<T, _1> >
{
};

template <class R1, class R2>
struct cross_product :
    fold<
        typename transform<R1, product<_1, R2> >::type,
        list<>,
        joint_view<_1, _2>
>
{
};

Is there a better way to do it? How can I get rid of
'struct product' and implement it as one metafunction?

Regards,
Roman Perepelitsa

Deutsche Bank Moscow
+7 (495) 660-74-08

---
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.
Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures.


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