Boost logo

Boost Users :

Subject: Re: [Boost-users] [MPL][FUSION] generate fusion::map from mpl::vector
From: Adam Merz (adammerz_at_[hidden])
Date: 2008-09-28 17:56:27


Manuel Jung <gzahl <at> arcor.de> writes:
> Well this is what i've got so far:
>
> template< typename OutSignatures >
> class filter_impl{
> typedef typename mpl::transform< OutSignatures,
> boost::promise_stream<mpl::_1> >::type OutStreams;
>
> typedef typename mpl::transform< OutSignatures, OutStreams,
> fusion::make_pair< mpl::_1, mpl::_2 > >::type OutPairs;
>
> typedef typename fusion::result_of::as_map< fusion::vector< OutPairs >
> >::type Out_type;
>
> }
>
> This compiles fine. But i'm not able to generate some fusion::map from the
> Out_type.
> I get compiling errors than.

Upon looking at your original code further, there does indeed appear to be a
trivial fix to get it to compile -- add result_of:: before make_pair, and get
rid of fusion::vector<> around OutPairs:

template<typename OutSignatures>
struct filter_impl
{
    typedef typename mpl::transform
    <
        OutSignatures,
        boost::promise_stream<mpl::_1>
>::type OutStreams;

    typedef typename mpl::transform
    <
        OutSignatures,
        OutStreams,
        fusion::result_of::make_pair<mpl::_1, mpl::_2>
>::type OutPairs;

    typedef typename fusion::result_of::as_map<OutPairs>::type OutMap;
};

This can now be reduced to the more succinct:

template<typename OutSignatures>
struct filter_impl
{
    typedef typename fusion::result_of::as_map
    <
        typename mpl::transform
        <
            OutSignatures,
            fusion::result_of::make_pair
            <
                mpl::_1,
                boost::promise_stream<mpl::_1>
>
>::type
>::type OutMap;
};


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