On Fri, 2010-03-19 at 10:56 +0800, hitesh dhiman wrote: > > > ---------- Forwarded message ---------- > From: hitesh dhiman <hitesh.dhiman.1...@gmail.com> > Date: Thu, Mar 18, 2010 at 11:39 AM > Subject: passing pointers from python > To: Development of Python/C++ integration <cplusplus-sig@python.org>, > boost-us...@lists.boost.org > > > Hi all, > i'm trying to wrap c++ functions that have pointer variables. The test > example i'm using is shown below: > int World::addition(int* a, int* b) > { > int z = *a + *b; > return z; > } > > > Now, i defined it in my wrapper as : > .def("addition", &World::addition) > > > My code compiles, but when I try to execute it from python, i get this > error: > Python Argument types in World.Addition(World, int, int) did not match > C++ signature: addition(class World {lvalue}, int* , int*) > > > Is there a workaround for this?? >
I can't think of an easy one - your C++ function signature implies that it could change the arguments (otherwise, why pass by pointer?), but Python integers are immutable objects, and can't be changed when passed as arguments. That's why Boost.Python isn't doing the conversion automatically. If your code doesn't need to actually modify its arguments - as is the case in your example - you can of course write C++ wrappers that take arguments by value and forward them as pointers, and just wrap those functions for Python. Note that you can wrap a free function that takes a World& as its first argument as a member function of the World class; there will be no difference between that and wrapping a true member function on the Python side. Jim Bosch _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig