add %extend_smart_pointer directive docs

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8712 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2006-02-04 18:06:45 +00:00
commit dc3685c0af

View file

@ -1,6 +1,63 @@
Version 1.3.28 (unreleased).
===========================
02/04/2006: mmatus
[Python] Add the %extend_smart_pointer() directive to extend
SWIG smart pointer support in python.
For example, if you have a smart pointer as:
template <class Type> class RCPtr {
public:
...
RCPtr(Type *p);
Type * operator->() const;
...
};
you use the %extend_smart_pointer directive as:
%extend_smart_pointer(RCPtr<A>);
%template(RCPtr_A) RCPtr<A>;
then, if you have something like:
RCPtr<A> make_ptr();
int foo(A *);
you can do the following:
a = make_ptr();
b = foo(a);
ie, swig will accept a RCPtr<A> object where a 'A *' is
expected.
Also, when using vectors
%extend_smart_pointer(RCPtr<A>);
%template(RCPtr_A) RCPtr<A>;
%template(vector_A) std::vector<RCPtr<A> >;
you can type
a = A();
v = vector_A(2)
v[0] = a
ie, an 'A *' object is accepted, via implicit conversion,
where a RCPtr<A> object is expected. Additionally
x = v[0]
returns (and sets 'x' as) a copy of v[0], making reference
counting possible and consistent.
%extend_smart_pointer is just a collections of new/old
tricks, including %typemaps and the new %implicitconv
directive. You can see what it really does looking at the
end of the Lib/pytypemaps.swg file.
02/02/2006: mgossage
bugfix #1356577, changed double=>lua_number in a few places.
added the std::pair wrapping