96 lines
2.1 KiB
ReStructuredText
96 lines
2.1 KiB
ReStructuredText
.. Metafunctions/Composition and Argument Binding//_1,_2,..._n |10
|
|
|
|
Placeholders
|
|
============
|
|
|
|
Synopsis
|
|
--------
|
|
|
|
.. parsed-literal::
|
|
|
|
namespace placeholders {
|
|
typedef |unspecified| _;
|
|
typedef arg<1> _1;
|
|
typedef arg<2> _2;
|
|
|...|
|
|
typedef arg<\ *n*\ > _\ *n*\ ;
|
|
}
|
|
|
|
using placeholders::_;
|
|
using placeholders::_1;
|
|
using placeholders::_2;
|
|
|...|
|
|
using placeholders::_\ *n*\ ;
|
|
|
|
|
|
Description
|
|
-----------
|
|
|
|
A placeholder in a form ``_``\ *n* is simply a synonym for the corresponding
|
|
``arg<n>`` specialization. The unnamed placeholder ``_`` (underscore) carries
|
|
`special meaning`__ in bind and lambda expressions, and does not have
|
|
defined semantics outside of these contexts.
|
|
|
|
Placeholder names can be made available in the user namespace through
|
|
``using namespace mpl::placeholders;`` directive.
|
|
|
|
__ `bind semantics`_
|
|
|
|
Header
|
|
------
|
|
|
|
.. parsed-literal::
|
|
|
|
#include <boost/mpl/placeholders.hpp>
|
|
|
|
|Note:| The include might be omitted when using placeholders to construct a |Lambda
|
|
Expression| for passing it to MPL's own algorithm or metafunction: any library
|
|
component that is documented to accept a lambda expression makes the placeholders
|
|
implicitly available for the user code |-- end note|
|
|
|
|
|
|
Parameters
|
|
----------
|
|
|
|
None.
|
|
|
|
|
|
Expression semantics
|
|
--------------------
|
|
|
|
For any integral constant ``n`` in the range [1, |BOOST_MPL_LIMIT_METAFUNCTION_ARITY|\] and
|
|
arbitrary types |a1...an|:
|
|
|
|
|
|
.. parsed-literal::
|
|
|
|
typedef apply_wrap\ *n*\<_\ *n*\,a1,\ |...|\a\ *n*\ >::type x;
|
|
|
|
:Return type:
|
|
A type.
|
|
|
|
:Semantics:
|
|
Equivalent to
|
|
|
|
.. parsed-literal::
|
|
|
|
typedef apply_wrap\ *n*\< arg<\ *n*\ >,a1,\ |...|\a\ *n* >::type x;
|
|
|
|
|
|
Example
|
|
-------
|
|
|
|
.. parsed-literal::
|
|
|
|
typedef apply_wrap\ ``5``\< _1,bool,char,short,int,long >::type t1;
|
|
typedef apply_wrap\ ``5``\< _3,bool,char,short,int,long >::type t3;
|
|
|
|
BOOST_MPL_ASSERT(( is_same< t1, bool > ));
|
|
BOOST_MPL_ASSERT(( is_same< t3, short > ));
|
|
|
|
|
|
See also
|
|
--------
|
|
|
|
|Composition and Argument Binding|, |arg|, |lambda|, |bind|, |apply|, |apply_wrap|
|