|
Boost : |
From: David A. Greene (greened_at_[hidden])
Date: 2002-12-05 11:55:33
[Posted to boost because MPL is not yet released. At what
point should these questions go to boost-users?]
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, 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).
Is the problem that my_type doesn't contain a ::type
member? my_type is not a metafunction so maybe it just
can't be used conveniently with mpl. It's easy enough
to manually define my_type_generator, but I think this
is a pretty common pattern and it might be useful as a
library component.
-Dave
-- "Some little people have music in them, but Fats, he was all music, and you know how big he was." -- James P. Johnson
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk