
Just to clarify, we're talking about mpl::lambda here. "David B. Held" <dheld@codelogicconsulting.com> writes:
Ok, suppose we have a policy-based class Foo, and a policy P:
template <typename Policy> class Foo { // ... };
struct P { template <typename T> struct apply { typedef policy type; }; };
P is a "metafunction class"
Now, my understanding is that we can use Lambda so that we can invoke Foo this way:
Foo<P> f;
for some definition of "invoke" ;-)
Or define P in this way:
template <typename T> struct P { // policy };
P is a "metafunction"
and call Foo this way:
For some defintion of "call" ;-)
Foo<P<_> > f;
P<_> is a "lambda expression"
But if I require that everyone define P in the first way, then Lambda should not be necessary, is that correct? Is there still a reason to use Lambda in that case?
In the upcoming version of MPL (very soon now) mpl::apply -- which you'll want to use even to invoke metafunction classes portably (no, using P::template apply<whatever>::type doesn't work everywhere) -- will invoke mpl::lambda internally, so the upshot is that passing either lambda expressions or metafunction classes will work. -- Dave Abrahams Boost Consulting http://www.boost-consulting.com