123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Copyright David Abrahams 2002.
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #ifndef MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
- # define MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
- # include <boost/python/make_function.hpp>
- # include <boost/python/args_fwd.hpp>
- # include <boost/python/object/make_holder.hpp>
- # include <boost/mpl/size.hpp>
- namespace boost { namespace python { namespace detail {
- // Think of this as a version of make_function without a compile-time
- // check that the size of kw is no greater than the expected arity of
- // F. This version is needed when defining functions with default
- // arguments, because compile-time information about the number of
- // keywords is missing for all but the initial function definition.
- //
- // @group make_keyword_range_function {
- template <class F, class Policies>
- object make_keyword_range_function(
- F f
- , Policies const& policies
- , keyword_range const& kw)
- {
- return detail::make_function_aux(
- f, policies, detail::get_signature(f), kw, mpl::int_<0>());
- }
- template <class F, class Policies, class Signature>
- object make_keyword_range_function(
- F f
- , Policies const& policies
- , keyword_range const& kw
- , Signature const& sig)
- {
- return detail::make_function_aux(
- f, policies, sig, kw, mpl::int_<0>());
- }
- // }
- // Builds an '__init__' function which inserts the given Holder type
- // in a wrapped C++ class instance. ArgList is an MPL type sequence
- // describing the C++ argument types to be passed to Holder's
- // constructor.
- //
- // Holder and ArgList are intended to be explicitly specified.
- template <class ArgList, class Arity, class Holder, class CallPolicies>
- object make_keyword_range_constructor(
- CallPolicies const& policies // The CallPolicies with which to invoke the Holder's constructor
- , detail::keyword_range const& kw // The (possibly empty) set of associated argument keywords
- , Holder* = 0
- , ArgList* = 0, Arity* = 0)
- {
- #if !defined( BOOST_PYTHON_NO_PY_SIGNATURES) && defined( BOOST_PYTHON_PY_SIGNATURES_PROPER_INIT_SELF_TYPE)
- python_class<BOOST_DEDUCED_TYPENAME Holder::value_type>::register_();
- #endif
- return detail::make_keyword_range_function(
- objects::make_holder<Arity::value>
- ::template apply<Holder,ArgList>::execute
- , policies
- , kw);
- }
- }}} // namespace boost::python::detail
- #endif // MAKE_KEYWORD_RANGE_FN_DWA2002927_HPP
|