|
Boost.PythonHeader <boost/python/to_python_indirect.hpp> |
to_python_indirect
to_python_indirect
synopsis
to_python_indirect
observer functions
to_python_indirect
static functions
<boost/python/to_python_indirect.hpp>
supplies
a way to construct new Python objects that hold wrapped C++ class
instances via a pointer or smart pointer.
to_python_indirect
Class template to_python_indirect
converts objects
of its first argument type to python as extension class instances, using the ownership policy provided by its 2nd argument.
Parameter | Requirements | Description |
---|---|---|
T
| Either U cv&
(where cv is any optional cv-qualification) or a Dereferenceable type such that
*x is convertible to U const& , where
U is a class type.
| A type deferencing a C++ class exposed to Python using
class template class_ .
|
MakeHolder
| h = MakeHolder::execute(p); | A class whose static execute() creates an
instance_holder .
|
to_python_indirect
are models of ResultConverter.
to_python_indirect
synopsisnamespace boost { namespace python { template <class T, class MakeHolder> struct to_python_indirect { static bool convertible(); PyObject* operator()(T ptr_or_reference) const; private: static PyTypeObject* type(); }; }}
to_python_indirect
observersPyObject* operator()(T x) const;
x
refers to an object (if it
is a pointer type, it is non-null). convertible() ==
true
.
MakeHolder
to create
an instance_holder
from x
, installs
the instance_holder
in the new extension class
instance, and returns a pointer to it.
to_python_indirect
staticsbool convertible();
true
iff any module has
registered a Python type corresponding to U
.
struct make_reference_holder { typedef boost::python::objects::instance_holder* result_type; template <class T> static result_type execute(T* p) { return new boost::python::objects::pointer_holder<T*, T>(p); } }; struct reference_existing_object { // metafunction returning the ResultConverter template <class T> struct apply { typedef boost::python::to_python_indirect<T,make_reference_holder> type; }; };
Revised 13 November, 2002
© Copyright Dave 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)