]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | .. Metafunctions/Composition and Argument Binding//arg |50 |
2 | ||
3 | arg | |
4 | === | |
5 | ||
6 | Synopsis | |
7 | -------- | |
8 | ||
9 | .. parsed-literal:: | |
10 | ||
11 | template< int n > struct arg; | |
12 | ||
13 | template<> struct arg<1> | |
14 | { | |
15 | template< typename A1,\ |...| typename A\ *n* = |unspecified| > | |
16 | struct apply | |
17 | { | |
18 | typedef A1 type; | |
19 | }; | |
20 | }; | |
21 | ||
22 | |...| | |
23 | ||
24 | template<> struct arg<\ *n*\> | |
25 | { | |
26 | template< typename A1,\ |...| typename A\ *n* > | |
27 | struct apply | |
28 | { | |
29 | typedef A\ *n* type; | |
30 | }; | |
31 | }; | |
32 | ||
33 | ||
34 | Description | |
35 | ----------- | |
36 | ||
37 | ``arg<n>`` specialization is a |Metafunction Class| that return the ``n``\ th of its arguments. | |
38 | ||
39 | ||
40 | Header | |
41 | ------ | |
42 | ||
43 | .. parsed-literal:: | |
44 | ||
45 | #include <boost/mpl/arg.hpp> | |
46 | ||
47 | ||
48 | Parameters | |
49 | ---------- | |
50 | ||
51 | +---------------+-----------------------------------+-----------------------------------------------+ | |
52 | | Parameter | Requirement | Description | | |
53 | +===============+===================================+===============================================+ | |
54 | | ``n`` | An integral constant | A number of argument to return. | | |
55 | +---------------+-----------------------------------+-----------------------------------------------+ | |
56 | ||
57 | ||
58 | Expression semantics | |
59 | -------------------- | |
60 | ||
61 | For any integral constant ``n`` in the range [1, |BOOST_MPL_LIMIT_METAFUNCTION_ARITY|\] and | |
62 | arbitrary types |a1...an|: | |
63 | ||
64 | .. parsed-literal:: | |
65 | ||
66 | typedef apply_wrap\ *n*\< arg<\ *n*\ >,a1,\ |...|\a\ *n* >::type x; | |
67 | ||
68 | :Return type: | |
69 | A type. | |
70 | ||
71 | :Semantics: | |
72 | ``x`` is identical to ``an``. | |
73 | ||
74 | ||
75 | Example | |
76 | ------- | |
77 | ||
78 | .. parsed-literal:: | |
79 | ||
80 | typedef apply_wrap\ ``5``\< arg<1>,bool,char,short,int,long >::type t1; | |
81 | typedef apply_wrap\ ``5``\< arg<3>,bool,char,short,int,long >::type t3; | |
82 | ||
83 | BOOST_MPL_ASSERT(( is_same< t1, bool > )); | |
84 | BOOST_MPL_ASSERT(( is_same< t3, short > )); | |
85 | ||
86 | ||
87 | See also | |
88 | -------- | |
89 | ||
90 | |Composition and Argument Binding|, |Placeholders|, |lambda|, |bind|, |apply|, |apply_wrap| | |
91 | ||
92 | ||
93 |