Boost logo

Boost :

From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2008-04-06 10:44:40


AMDG

Sergei Politov wrote:
> Sorry, I'm not very familiar with mpl::lambda, as far as I understand to
> write make_vector<boost::mpl::_> I should support mpl::lambda in make_vector.
> If so it is not neccessary, as soon as it is just example, and it does not
> belong to internal part of map_gen.
>

No. make_vector doesn't have to know about mpl::_.
map_gen has to use mpl::apply to make lambda expressions work.

>>> In other words it takes some fusion sequence and metafunction.
>>>
>> MPL sequence? There shouldn't be any runtime information associated
>> with the key.
>>
> I meant: "fully conforming fusion sequences". As soon as it is possible to
> adapt mpl sequence to fusion sequence, I suggest it is better to require fusion
> sequence concept rather mpl sequence concept. Even runtime information is not
> used. It produces no overhead, but makes map_gen more flexible.
>

It's already pretty easy to make such a map using mpl sequences.

#include <boost/fusion/container/map.hpp>
#include <boost/fusion/include/convert.hpp>
#include <boost/fusion/support/pair.hpp>
#include <boost/fusion/adapted/mpl.hpp>
#include <boost/fusion/sequence/intrinsic/at_key.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/transform.hpp>
#include <vector>

using namespace boost;
using namespace mpl::placeholders;

typedef fusion::result_of::as_map<
    mpl::transform<
        mpl::vector<int, char, double>,
        fusion::pair<_, std::vector<_> >
>::type
>::type map_type;

int main() {
    map_type map;
    fusion::at_key<int>(map).push_back(1);
    fusion::at_key<char>(map).push_back(1);
    fusion::at_key<char>(map).push_back(1.4);
    fusion::at_key<int>(map).push_back(1.4);
}

In Christ,
Steven Watanabe


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