I just wanted to add one more clarification, because actually there is
a bug in the code I posted..
For this late binding to work properly..
You really want to have something like this (sorry, ripping from
non-test code):
template<typename T>
struct PAccessorConverter
{
static PyObject* convert(const T &x)
{
if (x==0)
// i believe this is sending back None, not sure have to verify
return
boost::python::incref(boost::python::object().ptr());
return boost::python::incref(x->getPtr().ptr());
}
};
and have that instantiated something like
#define IMPLEMENT_PYTHON_CONVERTER(x) \
boost::python::to_python_converter<x *, PAccessorConverter<x *> >();
IMPLEMENT_PYTHON_CONVERTER(myclass)
and then when you're doing a class.def, don't return the
"existing_reference" because that will somehow cause boost python not
to look up the converter..
instead do a return by value... something like:
.def("getParentUser", &PCamera::getParentUser,
return_value_policy<return_by_value>())
this return_value_policy<return_by_value> queues boost python to
search the converters..
which will eventually hit the converter that uses the embedded python object..
(which allows you to have a 1-to-1 relationship between python and c++)
-tim
_______________________________________________
Cplusplus-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig