From: James B. <bi...@cs...> - 2006-04-28 15:33:19
|
John Pye wrote: > Hi all > > I've got some queries with the use of 'typemaps' in SWIG. > > In my interface, lots of methods receive and output values of a > *templated* C++ type called 'Units'. I don't want to make this class > visible to the scripting language, so I want to typemap all Units > arguments (ie Units<int m, int l, int t, int k, int i>, with all > possible variations of m,l,t,k,i) to a single class called 'Measurement' > which will be complete exposed to the scripting language through SWIG. > > Most of the examples in the manual talk about converting to and from > string, int, char etc. But in this case I want to return not a native > script-language object (so PyInt_fromInt etc), but another SWIG-wrapped > object. And can I do this in a language-neutral way? > > What is the right way to do that? something like this? > > %typemap(in) Units<1,0,-1>{ > // convert a received Measurement object to Units<1,0,-1> for use in C++ > $1 = Units<1,0,-1>($input); > } > %typemap(out) Units<1,0,-1>{ > // convert an internal Units<1,0,-1> to a Measurement object for use > in the scripting language > $result = Measurement($1); > } I'm not an expert, but have you tried to using typedef (typedef Units<1,0,-1> Units10M1;) to see if that has an effect? > Also, is there any way I can do something like the following: > > template<int m, int l, int t, int k, int i> > %typemap(in) Units<m,l,t,k,i>{ > $1 = MassFlowRate($input); > } I believe you can do this with a %define: %define %Units_typemap(m,l,t,k,i) %typemap(in) Units<m,l,t,k,i> { $1 = MassFlowRate($input); } %Units_typemap(1,0,-1,1,0); James |