|
|
Boost.PythonHeader <boost/python/make_function.hpp> |
make_function() and
make_constructor()
are the functions used internally by class_<>::def,
class_<>::def,
and
class_<>::def_init
to produce Python callable objects which wrap C++ functions and member
functions.
template <class F> objects::function* make_function(F f)</a> template <class F, class Policies> objects::function* make_function(F f, Policies const& policies)
F is a function pointer or member
function pointer typef. If F is a pointer-to-member-function
type, the target object of the function call (*this)
will be taken from the first Python argument, and subsequent Python
arguments will be used as the arguments to f. If
policies are supplied, it must be a model of CallPolicies, and will be applied to
the function as described here.PyObject*
which refers to the new Python callable object.template <class T, class ArgList, class Generator> objects::function* make_constructor();
T is a class
type. ArgList is an MPL sequence of C++
argument types (A1, A2,... AN) such that if
a1, a2... aN are objects of type
A1, A2,... AN respectively, the expression
new Generator::apply<T>::type(a1, a2... aN) is
valid. Generator is a model of HolderGenerator.
Generator::apply<T>::type object. The result is
installed in the extension class object.
C++ function exposed below returns a callable object wrapping one of two functions.
#include <boost/python/make_function.hpp>
#include <boost/python/module.hpp>
char const* foo() { return "foo"; }
char const* bar() { return "bar"; }
PyObject* choose_function(bool selector)
{
if (selector)
return boost::python::make_function(foo);
else
return boost::python::make_function(bar);
}
BOOST_PYTHON_MODULE_INIT(make_function_test)
{
module("make_function_test")
.def("choose_function", choose_function);
}
It can be used this way in Python:
>>> from make_function_test import * >>> f = choose_function(1) >>> g = choose_function(0) >>> f() 'foo' >>> g() 'bar'
14 February 2002
© Copyright Dave Abrahams 2002. All Rights Reserved.