1 | // Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
|
---|
2 | // distribution is subject to the Boost Software License, Version 1.0.
|
---|
3 | // (See accompanying file LICENSE_1_0.txt or copy at
|
---|
4 | // http://www.boost.org/LICENSE_1_0.txt)
|
---|
5 |
|
---|
6 | // This file generates overloads in this format:
|
---|
7 | //
|
---|
8 | // template<class A0, class A1>
|
---|
9 | // typename aux::make_arg_list<
|
---|
10 | // PS0,A0
|
---|
11 | // , aux::make_arg_list<
|
---|
12 | // PS1,A1
|
---|
13 | // , mpl::identity<aux::empty_arg_list>
|
---|
14 | // >
|
---|
15 | // >::type
|
---|
16 | // operator()(A0 const& a0, A1 const& a1) const
|
---|
17 | // {
|
---|
18 | // typedef typename aux::make_arg_list<
|
---|
19 | // PS0,A0
|
---|
20 | // , aux::make_arg_list<
|
---|
21 | // PS1,A1
|
---|
22 | // , mpl::identity<aux::empty_arg_list>
|
---|
23 | // >
|
---|
24 | // >::type arg_tuple;
|
---|
25 | //
|
---|
26 | // return arg_tuple(
|
---|
27 | // a0
|
---|
28 | // , a1
|
---|
29 | // , aux::void_()
|
---|
30 | // ...
|
---|
31 | // );
|
---|
32 | // }
|
---|
33 | //
|
---|
34 |
|
---|
35 | #if !defined(BOOST_PP_IS_ITERATING)
|
---|
36 | # error Boost.Parameters - do not include this file!
|
---|
37 | #endif
|
---|
38 |
|
---|
39 | #define N BOOST_PP_ITERATION()
|
---|
40 |
|
---|
41 | #define BOOST_PARAMETER_open_list(z, n, text) \
|
---|
42 | aux::make_arg_list< \
|
---|
43 | BOOST_PP_CAT(PS, n), BOOST_PP_CAT(A, n) \
|
---|
44 |
|
---|
45 | #define BOOST_PARAMETER_close_list(z, n, text) >
|
---|
46 |
|
---|
47 | #define BOOST_PARAMETER_arg_list(n) \
|
---|
48 | BOOST_PP_ENUM(N, BOOST_PARAMETER_open_list, _) \
|
---|
49 | , mpl::identity<aux::empty_arg_list> \
|
---|
50 | BOOST_PP_REPEAT(N, BOOST_PARAMETER_close_list, _)
|
---|
51 |
|
---|
52 | template<BOOST_PP_ENUM_PARAMS(N, class A)>
|
---|
53 | typename BOOST_PARAMETER_arg_list(N)::type
|
---|
54 | operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a)) const
|
---|
55 | {
|
---|
56 | typedef typename BOOST_PARAMETER_arg_list(N)::type arg_tuple;
|
---|
57 |
|
---|
58 | return arg_tuple(
|
---|
59 | BOOST_PP_ENUM_PARAMS(N, a)
|
---|
60 | BOOST_PP_ENUM_TRAILING_PARAMS(
|
---|
61 | BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, N)
|
---|
62 | , aux::void_() BOOST_PP_INTERCEPT
|
---|
63 | ));
|
---|
64 | }
|
---|
65 |
|
---|
66 | #undef BOOST_PARAMETER_arg_list
|
---|
67 | #undef BOOST_PARAMETER_open_list
|
---|
68 | #undef BOOST_PARAMETER_close_list
|
---|
69 | #undef N
|
---|
70 |
|
---|