From: William S F. <ws...@fu...> - 2009-04-21 23:51:52
|
Jason Eubank wrote: > Hi, > > I am trying to provide C# code via the %typemap(cscode) route on a class > that was created using the %template(className) feature. However this > ends up not producing any of the code specified within the typemap code > segment. Also SWIG does not produce any errors, so I am assuming it is > parsing the code but simply throwing it away for some reason. Below is > an example. > > Thanks for any help, > Jason > > // Example code, PtrWrapper.i > > %ignore PtrWrapper::PtrWrapper(T* ptr); > %ignore PtrWrapper::AssignPointer; > %ignore PtrWrapper::GetPointer; > > %inline > %{ > > template<typename T> > class PtrWrapper > { > public: > // Native only methods > PtrWrapper(T* ptr) > : m_ptr(ptr) > { > } > > void AssignPointer(T* rhs) > { > m_ptr = rhs; > } > > T* GetPointer() const > { > return m_ptr; > } > > // Below are the only script accessible methods > PtrWrapper() > :m_ptr(0) > { > > } > > PtrWrapper(const PtrWrapper<T>& rhs) > : m_ptr(rhs.m_ptr) > { > } > > // Below are not available to <void> @TODO: use partial > specialization for these > void AssignValue(const T& rhs) > { > *m_ptr = rhs; > } > > T GetValue() const > { > return *m_ptr; > } > > void Increment() > { > m_ptr++; > } > > void Decrement() > { > m_ptr--; > } > > private: > T* m_ptr; > }; > > %} > > %template(PtrWrapper_float) PtrWrapper<float>; > > // This works correctly > %extend PtrWrapper<float> > { > int ImHere() > { > return 1; > } > } > > // This does nothing > %typemap(cscode) PtrWrapper<float> > %{ > public int ImHereToo() > { > return 1; > } > %} > > // This does nothing also > %typemap(cscode) PtrWrapper_float > %{ > public int ImHereAlso() > { > return 1; > } > %} Those last two typemaps will do nothing as there is no code after them that will match the types in the typemap. Move them to the beginning of your interface file. %typemap does not work in the same way as %extend! William |