Hi,

I'm starting to explore mpl a bit and I ran into a roadblock.
If I have a template that takes an argument that can be
a sequence (e.g. mpl::vector) or a regular old type, is
there any way, short of specialization, to determine whether
the parameter is a sequence?  I'd like to avoid specializing
the template based on mpl guts that may change.  Alternatively,
is there any way to manipulate the parameter to guarantee that
it is converted to a sequence (of one element) if it is not a
sequence?

Here's a second question.  Suppose I have a "chain" of types
such that each type contains as a member the next type in the
chain.  For example:

struct third;
struct second;
struct first;

struct first {
  typedef second type;
};

struct second {
  typedef third type;
};

struct third {
  typedef boost::mpl::void_ type;
};

If I want to use this kind of intrusive sequence with mpl,
how would I go about defining begin<> and end<>?  The headers
use something called begin_traits and end_traits but they
assume that the type passed is an mpl-style sequence that
has begin and end members defined.

I don't see how I can easily specialize begin<> and end<>
because I'd need a specialization for each of first, second
and third (in the real code there are many more of these).

I thought about designing some kind of wrapper that could
be used in specialization:

template<typename Node>
struct intrusive_list {
  typedef Node::type type;
};

Then I could partially specialize begin<>/end<> on
intrusive_list.  Is this a reasonable approach?  Does mpl
provide some more convenient method to use these kinds of
sequences?

Here's one final puzzle: I have two type vectors that
I'd like to merge into one.  The trick is that I want
to eliminate all duplicates.  Since types cannot be
ordered (how does one define a less-than operation?)
it seems that type vectors cannot be easily sorted.
Thus to do a concat/copy while eliminating duplicates
would seem to be a very expensive task (search for
each candidate in the built-up list before adding it).
Any ideas here?  I know I'm missing something important.

Great work by all on mpl -- I'm enjoying the exploration!

                      -Dave

--

"Some little people have music in them, but Fats, he was all music,
 and you know how big he was."  --  James P. Johnson

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

Reply via email to