45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | // 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 FUNCTION_HANDLE_DWA2002725_HPP | ||
|  | # define FUNCTION_HANDLE_DWA2002725_HPP | ||
|  | # include <boost/python/handle.hpp> | ||
|  | # include <boost/python/detail/caller.hpp> | ||
|  | # include <boost/python/default_call_policies.hpp> | ||
|  | # include <boost/python/object/py_function.hpp> | ||
|  | # include <boost/python/signature.hpp> | ||
|  | 
 | ||
|  | namespace boost { namespace python { namespace objects {  | ||
|  | 
 | ||
|  | BOOST_PYTHON_DECL handle<> function_handle_impl(py_function const& f); | ||
|  | 
 | ||
|  | // Just like function_object, but returns a handle<> instead. Using | ||
|  | // this for arg_to_python<> allows us to break a circular dependency | ||
|  | // between object and arg_to_python. | ||
|  | template <class F, class Signature> | ||
|  | inline handle<> function_handle(F const& f, Signature) | ||
|  | { | ||
|  |     enum { n_arguments = mpl::size<Signature>::value - 1 }; | ||
|  | 
 | ||
|  |     return objects::function_handle_impl( | ||
|  |         python::detail::caller< | ||
|  |             F,default_call_policies,Signature | ||
|  |         >( | ||
|  |             f, default_call_policies() | ||
|  |          ) | ||
|  |     ); | ||
|  | } | ||
|  | 
 | ||
|  | // Just like make_function, but returns a handle<> intead. Same | ||
|  | // reasoning as above. | ||
|  | template <class F> | ||
|  | handle<> make_function_handle(F f) | ||
|  | { | ||
|  |     return objects::function_handle(f, python::detail::get_signature(f)); | ||
|  | } | ||
|  | 
 | ||
|  | }}} // namespace boost::python::objects | ||
|  | 
 | ||
|  | #endif // FUNCTION_HANDLE_DWA2002725_HPP |