ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> boost
boost
RE: [boost] MPL lambda
by Aleksey Gurtovoy other posts by this author
Nov 18 2002 10:56AM messages near this date
Re: [boost] Re: Upcoming changes to shared_ptr | [boost] MPL's "round" lambda
Rozental, Gennadiy wrote:
>  > I hope you mean "what it does/how to use it" as opposite to 
>  > "how it does what it does" ;).
>  
>  In fact it is second ;-)

See http://aspn.activestate.com/ASPN/Mail/Message/boost/1156353 for the
sketch. The full implementation is just way too complicated to describe in
words. The code is always there, of course :).

>  
>  >     // numbered placeholders semantics
>  >     plus<_1, int_c<5> > == bind<meta_fun2<plus>,_1,int_c<5> >
>  >     plus< int_c<5>,_1 > == bind<meta_fun2<plus>,int_c<5>,_1 >
>  >     plus< int_c<5>,_2 > == bind<meta_fun2<plus>,int_c<5>,_2 >
>  >     plus<_1,_2> == bind<meta_fun2<plus>,_1,_2>
>  >     plus<_2,_1> == bind<meta_fun2<plus>,_2,_1>
>  >     
>  >     logical_or< is_same<_1,int>, is_same<_1,long> >
>  >         = bind< meta_fun2<logical_or>
>  >             , bind< meta_fun2<is_same>,_1,int >
>  >             , bind< meta_fun2<is_same>,_1,long >
>  >             >
>  > 
>  >     is_same< _1, add_pointer<_2> >
>  >         == bind< meta_fun2<is_same>
>  >             , _1
>  >             , bind< meta_fun1<add_pointer>, _2 >
>  >             >
>  
>  It would help if you start with what meta_fun[n] are, cause 
>  they are not covered in docs. 

'meta_fun[n]' (to be renamed to 'quote[n]') converts a metafunction
(http://www.mywikinet.com/mpl/paper/mpl_paper.html#metafunctions.simple) of
arity 'n' into the corresponding metafunction class
(http://www.mywikinet.com/mpl/paper/mpl_paper.html#metafunctions.classes).

>  Also if I understand correctly it require 
>  template template parameters. 

Yes.

>  How then it works for MSVC6.5?

It ('meta_fun') doesn't. Lambda facility does, because on deficient
compilers it employs intrusive introspection:

    template< typename T >  struct identity
    {
        typedef T type;
        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,identity,(T)) // here
    };

The marked line is required if you want to use 'identity' in lambda
expressions on compilers that don't support partial specialization or
template template parameters.

[...]

>  So the _ placeholder is substituted with appropriated numbered 
>  one based on position in expression. How did you managed to achieve 
>  this?

Well, I just do that - when resolving each bind's argument I analyze if it
is the unnamed placeholder, and if it is, then I substitute it for the
current numbered equivalent and "increment" the count. See
"boost/mpl/aux_/preprocessed/plain/bind.hpp" for the details. For comparison
purposes, "boost/mpl/aux_/preprocessed/plain/basic_bind.hpp" contains the
preprocessed version _without_ the unnamed placeholder support.

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

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved