source: NonGTP/Boost/boost/python/detail/make_keyword_range_fn.hpp @ 857

Revision 857, 2.4 KB checked in by igarcia, 18 years ago (diff)
Line 
1// Copyright David Abrahams 2002.
2// Distributed under the Boost Software License, Version 1.0. (See
3// accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5#ifndef MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
6# define MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
7
8# include <boost/python/make_function.hpp>
9# include <boost/python/args_fwd.hpp>
10
11# include <boost/python/object/make_holder.hpp>
12
13# include <boost/mpl/size.hpp>
14
15
16namespace boost { namespace python { namespace detail {
17
18// Think of this as a version of make_function without a compile-time
19// check that the size of kw is no greater than the expected arity of
20// F. This version is needed when defining functions with default
21// arguments, because compile-time information about the number of
22// keywords is missing for all but the initial function definition.
23//
24// @group make_keyword_range_function {
25template <class F, class Policies>
26object make_keyword_range_function(
27    F f
28  , Policies const& policies
29  , keyword_range const& kw)
30{
31    return detail::make_function_aux(
32        f, policies, detail::get_signature(f), kw, mpl::int_<0>());
33}
34
35template <class F, class Policies, class Signature>
36object make_keyword_range_function(
37    F f
38  , Policies const& policies
39  , keyword_range const& kw
40  , Signature const& sig)
41{
42    return detail::make_function_aux(
43        f, policies, sig, kw, mpl::int_<0>());
44}
45// }
46
47// Builds an '__init__' function which inserts the given Holder type
48// in a wrapped C++ class instance. ArgList is an MPL type sequence
49// describing the C++ argument types to be passed to Holder's
50// constructor.
51//
52// Holder and ArgList are intended to be explicitly specified.
53template <class ArgList, class Arity, class Holder, class CallPolicies>
54object make_keyword_range_constructor(
55    CallPolicies const& policies        // The CallPolicies with which to invoke the Holder's constructor
56    , detail::keyword_range const& kw   // The (possibly empty) set of associated argument keywords
57    , Holder* = 0                       
58    , ArgList* = 0, Arity* = 0)
59{
60    return detail::make_keyword_range_function(
61        objects::make_holder<Arity::value>
62            ::template apply<Holder,ArgList>::execute
63        , policies
64        , kw);
65}
66
67}}} // namespace boost::python::detail
68
69#endif // MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
Note: See TracBrowser for help on using the repository browser.