[C++-sig] Fwd: Re: shared_ptr and register_ptr_to_python
Marek Denis
marek at octogan.net
Sun Oct 10 14:26:24 CEST 2010
On 10.10.2010 03:47, Jim Bosch wrote:
>
> Pretty much everything you need should automatically work, whether you
> use shared_ptr or raw pointers with call policies. If you've invoked
> register_ptr_to_python on all the classes you're using,
That's what I couldn't get while reading Boost tutorial (the example
code didn't work either :( ).
Let's say I have three classes:
class A {};
class B : public A {};
class C : public B {};
should I later just put:
register_ptr_to_python< A >();
register_ptr_to_python< B >();
register_ptr_to_python< C >();
?
> you'll find that
> in Python you'll always get the most-derived class, even if it's
> returned as a base class pointer or smart pointer on the C++ side.
Here is the small code snippet:
+v
boost::python::call_method<void>(callback,"addToQueue",c);
-v
where callback is a PyObject* pointer,and 'c' is a pointer to the object.
Whenever I call this instruction, I can see that the 'c' object is being
copied (I just put some cout << "debug" << endl in the definition of the
Copy Constructor), so I assumed that Python code doesn't operate on the
object that was created in C++ module. Instead, it just operates on the
copy.
> You shouldn't need any extra compiler flags. Just use Boost.Python the
> way described in the tutorial, and throw in some register_ptr_to_python
> invocations - that should be all you need.
--
best wishes
Marek Denis
More information about the Cplusplus-sig
mailing list