Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2006-08-21 22:31:21


Edd Dawson <edd_at_[hidden]> writes:

>>>> I'm looking for a way to call f<T>() for all types T in my_vec. I initially
>>>> hoped that either an mpl algorithm or fusion::for_each might be able to
>>>> accomplish this for me, but after reading through their docs this doesn't appear
>>>> to be the case.
>>> struct call_f
>>> {
>>> template <class Wrapper>
>>> void operator()(Wrapper)
>> Sorry, it's missing a "const" right here--^^^^
>>> {
>>> f<typename Wrapper::type>();
>>> }
>>> };
>>>
>>> mpl::for_each<my_vec, mpl::identity<_> >(call_f());
>>
>
> I didn't find this in the docs. Is it meant to be there?

The specific answer to your specific problem? No. Oh yeah, for_each
wasn't documented in 1.33.1... and apparently it isn't documented in
the CVS head either (still? Aleksey?)

> Unfortunately, that didn't quite work for me, anyway. A requirement
> of for_each (according to my MSVC 8 diagnostics) is that each type
> in the sequence must be default constructible.

In the case above, only mpl::identity<T> needs to be
default-constructible for each type in the list... or that was my
intention Ach! My mistake...

    template <class T>
    struct make_identity { typedef mpl::identity<T> type; };

    mpl::for_each<my_vec, make_identity<_> >(call_f());

should work.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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