// 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_SYGNATURES_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 |