[857] | 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 |
|
---|