From: William S F. <ws...@fu...> - 2008-03-06 17:47:50
|
William S Fulton wrote: > Christopher Barker wrote: >> Nitro wrote: >>> I had this issue, too. It's really annoying. In the end I ended up >>> with this: >>> My smart pointers are reference count based ones. So I wrote a couple >>> of typemaps for my smart pointers. These typemaps accept "normal" >>> objects (without smart pointers) where in C++ smart pointers are >>> expected. Then python reference counting is used to manage my >>> refcounted objects. >> >> This sounds like a wonderful and powerful approach -- do you have any >> small, self-contained examples? >> > > The latest version of SWIG also has support for shared_ptr. See the > Examples\test-suite\li_boost_shared_ptr.i example. > I also meant to mention that it supports wrapping raw pointers, plain references to a class as well as passing classes by value. So you can mix shared_ptr<T> and T, T*, T&, T*& and it will all just work. Actually there is also shared_ptr<T>& and shared_ptr<T>* typemaps too. Inheritance is supported - it required some changes to the runtime in 1.3.34, so you can pass shared_ptr<Derived> to a method that takes shared_ptr<Base>. The normal swig reference counting mechanism that generates two classes is disabled - only one class is generated, so less code is generated. William |