David A. Greene wrote:
> [Posted to boost because MPL is not yet released.  At what
>   point should these questions go to boost-users?]

It's mainly the content of the message that determines whether it should be
posted here or to the Boost Users list; the status of the library - is it in
development, pre-release, or released state - doesn't matter much. Boost
Users is a gateway for, well, Boost users that feel overwhelmed and
intimidated by the high volume and level of technical content that flows
through this list. Basically, it's a place for newbie and frequently asked
questions. If the question is highly technical - as the one I am replying to
- it belongs here.

> 
> Say I have a type my_type:
> 
> template<typename T, typename U, typename V>
> struct my_type { ... }
> 
> Now let's say I want to create a generator that
> binds T to some type but leaves U and V free to
> be filled in later.   Basically, I want something
> like this:
> 
> template<typename Bound>
> struct my_type_generator {
>     template<typename U, typename V>
>     struct apply {
>        typedef my_type<Bound, U, V> type;
>     };
> };
> 
> Is there a convenient way to create this with MPL? 
> I thought lambda might do the trick, 

Yep, that would be intuitive, wouldn't it?


> but apparently not:
> 
> typedef my_type<int, mpl::_1, mpl::_2> my_type_generator;
> 
> (This will be passed to an MPL algorithm so I didn't
> bother with lambda<>).
> 
> This causes a static assertion in mpl::arg<2> where it
> sees a void type for V (I think).

Hmm, actually it should be something like this:

error C2039: 'type' : is not a member of
'boost::mpl::meta_fun3<F>::apply<U1,U2,U3>'

but it doesn't matter much - you are right, it won't compile, currently.


> 
> Is the problem that my_type doesn't contain a ::type
> member?  

Yes.

> my_type is not a metafunction so maybe it just
> can't be used conveniently with mpl.  

Not now. However, I constantly keep finding more and more use cases to be
inclined to provide a built-in library support for this particular
metafunction's form - in particular, so that one could do exactly what
you've tried to:

    typedef my_type<int, mpl::_1, mpl::_2> my_type_generator;

pass it to an algorithm, and it will work as expected.

> It's easy enough
> to manually define my_type_generator, but I think this
> is a pretty common pattern 

Very!

> and it might be useful as a library component.

Thanks for the feedback! I would expect the feature to appear in the CVS
somewhere on the weekend.

Aleksey
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to