|
Boost.PythonHeader <boost/python/with_custodian_and_ward.hpp> |
with_custodian_and_ward
with_custodian_and_ward
synopsis
with_custodian_and_ward
static functions
with_custodian_and_ward_postcall
with_custodian_and_ward_postcall
synopsis
with_custodian_and_ward_postcall
static functions
None
, an appropriate exception
will be thrown. The two class templates
with_custodian_and_ward
and
with_custodian_and_ward_postcall
differ in the point
at which they take effect.
In order to reduce the chance of inadvertently
creating dangling pointers, the default is to do lifetime binding
before the underlying C++ object is invoked. However,
before invocation the result object is not available, so
with_custodian_and_ward_postcall
is provided to bind
lifetimes after invocation. Also, if a C++ exception is thrown
after with_custodian_and_ward<>::precall
but
before the underlying C++ object actually stores a pointer, the
lifetime of the custodian and ward objects will be artificially
bound together, so one might choose
with_custodian_and_ward_postcall
instead, depending
on the semantics of the function being wrapped.
with_custodian_and_ward
Parameter | Requirements | Description | Default |
---|---|---|---|
custodian
| A positive compile-time constant of type
std::size_t .
| The 1-based index of the parameter which is the dependency in the
lifetime relationship to be established. If used to
wrap a member function, parameter 1 is the target object
(*this ). Note that if the target Python object
type doesn't support weak references, a Python
TypeError exception will be raised when the
C++ object being wrapped is called.
| |
ward
| A positive compile-time constant of type
std::size_t .
| The 1-based index of the parameter which is the dependent in the
lifetime relationship to be established. If used to
wrap a member function, parameter 1 is the target object
(*this ).
| |
Base
| A model of CallPolicies | Used for policy composition. | default_call_policies
|
with_custodian_and_ward
synopsisnamespace boost { namespace python { template <std::size_t custodian, std::size_t ward, class Base = default_call_policies> struct with_custodian_and_ward : Base { static bool precall(PyObject* args); }; }}
with_custodian_and_ward
static functionsbool precall(PyObject* args);
PyTuple_Check(args) != 0
ward
dependent on the lifetime of the argument
indicated by custodian
.
false
and PyErr_Occurred() != 0
upon failure, true
otherwise.
with_custodian_and_ward_postcall
Parameter | Requirements | Description | Default |
---|---|---|---|
custodian
| A compile-time constant of type
std::size_t .
| The index of the parameter which is the dependency in the
lifetime relationship to be established. Zero indicates the
result object; 1 indicates the first argument. If used to wrap
a member function, parameter 1 is the target object
(*this ). Note that if the target Python object
type doesn't support weak references, a Python
TypeError exception will be raised when the
C++ object being wrapped is called.
| |
ward
| A compile-time constant of type std::size_t .
| The index of the parameter which is the dependent in the
lifetime relationship to be established. Zero indicates the
result object; 1 indicates the first argument. If used to wrap
a member function, parameter 1 is the target object
(*this ).
| |
Base
| A model of CallPolicies | Used for policy composition. | default_call_policies
|
with_custodian_and_ward_postcall
synopsisnamespace boost { namespace python { template <std::size_t custodian, std::size_t ward, class Base = default_call_policies> struct with_custodian_and_ward_postcall : Base { static PyObject* postcall(PyObject* args, PyObject* result); }; }}
with_custodian_and_ward_postcall
static functionsPyObject* postcall(PyObject* args, PyObject* result);
PyTuple_Check(args)
!= 0
, result != 0
.
ward
dependent on the lifetime of the object
indicated by custodian
.
0
and PyErr_Occurred() != 0
upon failure, true
otherwise.
with_custodian_and_ward_postcall
is used by the library
to implement return_internal_reference
template <std::size_t owner_arg = 1, class Base = default_call_policies> struct return_internal_reference : with_custodian_and_ward_postcall<0, owner_arg, Base> { typedef reference_existing_object result_converter; };
Revised 29 May, 2002
© Copyright Dave Abrahams 2002. All Rights Reserved.