Jim Bosch
Tue, 02 Mar 2010 18:34:14 -0800
On Wed, 2010-03-03 at 07:48 +0530, puneet goel wrote:
> Mathew/Jim
>
> > If you just need your Python interface to support calling those function
> > pointers, not adding new functions in Python, it's relatively easy.
>
> Thanks for your support.
>
> Actually I need to pass data from Python to C++. I am required to
> pass Python functions as part of the structure in a way that these get
> executed somewhere in C++.
>
> Now that I know that this can not be done in a straightforward manner,
> I am looking for a workaround. I would like to know whether it is at
> all possible to pass a Python function, as data, to C++ using
> boost-python. What would be the C++ type of a structure element that
> would be able to hold a Python function when passed using
> boost-python?
>
> To clarify, if I get the C++ API changed to something like
>
> struct foo {
> public:
> int a, b;
> char *str;
>
> foobar func1;
> foobar func2;
> };
>
> What type (in C++) would foobar be so that I am able to pass a python
> function for func1 and func2?
boost::python::object - it's just a smart pointer to an arbitrary Python object (in the Python C-API, it's PyObject*). It overloads operator() to invoke the underlying Python object's __call__ method, and it's templated to take a reasonable number of arbitrarily typed arguments, convert them to Python, and feed them to the Python method. Jim _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig