[C++-sig] Re: call_method
dave at boost-consulting.com
Sat Nov 16 07:00:40 CET 2002
"Brett Calcott" <brett.calcott at paradise.net.nz> writes:
>> > Are there some other advantages to using shared_ptr?
>> Oh, yes: many, many. For example, shared_ptr<U> -> shared_ptr<T> is a
>> legitimate conversion, even though you haven't intruded on U. And
>> probably more-importantly, shared_ptr<> interoperates seamlessly in
>> many contexts and serves as a "one-stop shop" for nearly all smart
>> pointer needs. Just see the enclosed document for reasons why.
> Wow - mind-expanding material. But I still cannot see a way to using
> shared_ptr. The customer release function passed in the constructor doesn't
> give you enough control to do the "crazy" counting stuff.
You don't need to do the "crazy" counting stuff! (read on...)
> How did you want to progress this? Is it worth trying to put something like
> this back into the library -- or should it just go into the documentation as
> a "technique"?
I'm thinking we should do this:
1. Set up Boost.Python so that shared_ptr<T> can be extracted from any
Python object from which we can extract T*... no matter how it's
held! You can do this by using a custom deleter that holds the Python
object and keeps it alive. See the section titled:
"Using a shared_ptr to Hold Another Shared Ownership Smart Pointer"
I find this very exciting, and can't believe I didn't think of it
2. Prepare a special "self_base" class that can be used as a base of
"callback" classes like BaseWrap from the examples. This base would
hold the "self" pointer. It would also provide a family of
convenience functions which implement call_method<> on the held
self pointer without having to explicitly mention it (hmm, I'm not
sure I can make this work out on msvc6. But that's another
issue). Most-importantly, when references and (smart) pointers to
polymorphic classes are converted to python, we will attempt to
downcast to "self_base", and if successful, we'll return the
contained self pointer instead of a new object.
dave at boost-consulting.com * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution
More information about the Cplusplus-sig