move %extend_smart_pointer to pyuserdir.swg
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8713 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
dc3685c0af
commit
750c9c1efb
3 changed files with 58 additions and 8 deletions
|
|
@ -55,8 +55,7 @@ Version 1.3.28 (unreleased).
|
||||||
|
|
||||||
%extend_smart_pointer is just a collections of new/old
|
%extend_smart_pointer is just a collections of new/old
|
||||||
tricks, including %typemaps and the new %implicitconv
|
tricks, including %typemaps and the new %implicitconv
|
||||||
directive. You can see what it really does looking at the
|
directive.
|
||||||
end of the Lib/pytypemaps.swg file.
|
|
||||||
|
|
||||||
02/02/2006: mgossage
|
02/02/2006: mgossage
|
||||||
bugfix #1356577, changed double=>lua_number in a few places.
|
bugfix #1356577, changed double=>lua_number in a few places.
|
||||||
|
|
|
||||||
|
|
@ -107,10 +107,4 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Use this macro to extend the smart pointer support */
|
|
||||||
%define %extend_smart_pointer(Type...)
|
|
||||||
%implicitconv Type;
|
|
||||||
%apply const SWIGTYPE& SMARTPOINTER { const Type& };
|
|
||||||
%apply SWIGTYPE SMARTPOINTER { Type };
|
|
||||||
%enddef
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -185,4 +185,61 @@ These methods "may be called" if needed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
%extend_smart_pointer extend the smart pointer support.
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
%define %extend_smart_pointer(Type...)
|
||||||
|
%implicitconv Type;
|
||||||
|
%apply const SWIGTYPE& SMARTPOINTER { const Type& };
|
||||||
|
%apply SWIGTYPE SMARTPOINTER { Type };
|
||||||
|
%enddef
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue