Boost logo

Boost Users :

From: Thyfate (thyfate_at_[hidden])
Date: 2006-09-06 07:30:01


Hello !

 

I have been trying to work with the MPL but I have some problems with the
composition and argument binding concepts.

 

1/ Here is a problem I cannot find a solution for:

I would like to have a placeholder expression (S) which takes a single
argument which is itself a placeholder expression of 2 arguments (A).

I want S when invoked with mpl::apply to return a lambda expression (B) of 1
argument which when invoked on (x) would yield the same result than applying
the pair (x, x) to (A).

This means I expect apply<S, A> == B and apply<B, x> == apply<A, x, x>.

Could someone tell me if this is possible? (I know how to do this without a
placeholder expression for (S) but I would like to improve my understanding
of them)

 

Typedef int_<1> one;

Typedef plus<_1, _2> A;

Typedef . S;

Typedef typename apply<S, A>::type B;

BOOST_STATIC_ASSERT(apply<B, one>::type::value == apply<A, one,
one>::type::value)

 

 

2/ Why doesn't bind take a placeholder expression ? If I want to remap a
placeholder expression, I can do for example:

 

bind<typename lambda<plus<_1, _2>::type, _1, _1> but why doesn't the library
invoke lambda by itself ?

(bind< plus<_1, _2>, _1, _1> wont work)

 

Is the combination bind/lambda the only way to remap placeholder
expressions?

 

 

3/ What is the use of protect? Where can I find some examples?

 

 

Thanks in advance,

 

Charles

 



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net