123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /* -------------------------------------------------------------------------
- * Special user directives
- * ------------------------------------------------------------------------- */
- /* ------------------------------------------------------------------------- */
- /*
- Implicit Conversion using the C++ constructor mechanism
- */
- #define %implicitconv %feature("implicitconv")
- #define %noimplicitconv %feature("implicitconv", "0")
- #define %clearimplicitconv %feature("implicitconv", "")
- /* ------------------------------------------------------------------------- */
- /*
- %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
|