Boost logo

Boost :

From: Joel de Guzman (joel_at_[hidden])
Date: 2003-10-23 18:44:30

David B. Held <dheld_at_[hidden]> wrote:
> "Joel de Guzman" <joel_at_[hidden]> wrote in message
> news:02b501c3994b$a8625780$64646464_at_godzilla...
>> [...]
>> The Fusion lib (in the sandbox) hopefully to replace the old tuple
>> lib can do that easily (example):
>> typedef boost::mpl::list<int, double, X, int> mpl_list1;
>> type_sequence<mpl_list1> view;
>> std::cout << generate(view) << std::endl;
>> generate(view) creates a tuple from the view.
> This looks promising, but could you briefly explain what a view
> is?

I'm writing some docs now. I posted some info regarding Fusion here:

> And can I just create my tuple directly from the sequence?
> Like so:
> template <typename T>
> struct foo
> {
> typedef typename as_sequence<T>::type my_types;
> foo(void) : my_tuple(generate(type_sequence<my_types>())) { }
> tuple<???> my_tuple;
> };

Yes. The usage will be something like:

template <typename T>
struct foo
    typedef typename as_sequence<T>::type my_types;
    typedef type_sequence<my_types> type_sequence;

    foo(void) : my_tuple(generate(type_sequence())) { }

    typename result_of_generate<type_sequence>::type my_tuple;

I'm still experimenting on the easiest syntax. For example, I think
it is possible to directly regard MPL sequences as Fusion views.

template <typename T>
struct foo
    typedef typename as_sequence<T>::type my_types;

    foo(void) : my_tuple(generate(my_types())) { }

    typename result_of_generate<my_types>::type my_tuple;

> Remember that I'm trying to get to here:
> get<3>(foo().my_tuple);
> That is, I want to be able to access the individual tuple elements
> at run-time. So if there's a better way to do that in fusion, then
> I'm all ears.

That and a lot more! Fusion is an entire MPL library for tuples!
If you know MPL, you'll love Fusion :-)


Joel de Guzman

Boost list run by bdawes at, gregod at, cpdaniel at, john at