David Abrahams wrote:

Your correction above makes everything clear to me now.
So do you  feel you need an additional library feature? ;-)
I suppose not.  What I really wanted was the ability to take a
regular old template class and create a generator out of it:

template<typename T, typename U, typename V>
struct my_type { ... }  // Note: no ::type member

typedef SHAZAM<my_type<int, _1, _2> > generator;

typedef generator::template apply<char, float>::type my_type_inst;

I want SHAZAM to be generic enough to take any template class,
not just my_type.  If I understand your solution correctly,
it requires a manually-constructed generator for my_type:

template<typename T, typename U, typename V>
struct my_type_generator {
  typedef my_type<T, U, V> type;
};

SHAZAM then becomes mpl::lambda.

The problem is, I'll have to create these trivial "generators"
(I hesitate to even call it that) many times over, once for each
class I want to bind.

But I can construct a generic trivial generator:

template<template<typename A, typename B, typename C> class Base,
         typename T, typename U, typename V>
struct trivial_generator {
   typedef Base<T, U, V> type;
};

Then I can use MPL lambda facilities.  Unfortunately, I need a
trivial_generator for every arity of class template.  But I
don't think there's any way around that.  MPL needs the same
thing for its placeholders.  It just seems a shame that this
enumeration needs to be repeated for this special case when
it already exists for _1, _2, etc.

I don't know... well, it could detect whether there was a ::type
member, and if it were not present, it could just give you the outer
class. I think that's a bit of a hack, though.
Agreed.  Urk...I'm not sure how to get around this problem without
requiring template template parameters (beyond what's used for
placeholders currently).
There's no way. So what? Your compiler supports them.
Of course.  But others don't.  I'm more concerned about the duplication
of effort described above.  But again, I don't think there's any way
around that.

                      -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