On 08/27/2010 01:35 AM, Erik Tuerke wrote:
Hi!

I am trying to convert a PyObject into its C-Type. The thing is, i have
a function which takes a PyObject but i need to convert the PyObject
into its respective C-Type.

For example i have a python class:

class_<isis::util::fvector4, _Vector4<float> >("py_fvector4",
init<float, float, float, float>())
.def( init<>())
.def("__setitem__", &_Vector4<float>::setItem)
.def("__getitem__", &_Vector4<float>::getItem)
;

How can i convert the PyObject "py_fvector4" back into its C-Type
_Vector4 (or isis::util::fvector4) ?

Thanks for your help and best regards!


Construct a boost::python::object from your PyObject*, and use extract():

namespace bp = boost::python;

void func(PyObject * arg);
    bp::object p(bp::handle<>(bp::borrowed(arg)));
    _Vector4<float> & v = bp::extract< _Vector4<float> >(arg);
}

This should also raise a TypeError if arg doesn't contain the appropriate C++ type.

By the way, Boost.Python can also wrap functions taking bp::object arguments, and that might be cleaner than a raw PyObject *.

HTH!

Jim Bosch
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to