SIP Python bindings generator - nested templates

Jim jbublitzNO at SPAMnwinternet.com
Fri Jan 17 21:28:25 CET 2003


Pakewak wrote:
> Jim wrote:
>  
> 
>>// in your sip files, you can either assign
>>// a new name to the template type, or just
>>// use it as the identifier - sip will accept
>>// the <'s and >'s as part of the identifier
>>%MappedType plSMat<plSquareMatrix<double>, 3>

> The line above causes a parse error. When I remove the second template 
> parameter it works:

Sorry - I've never had to try a nested
template.

> %MappedType plSMat<plSquareMatrix<double>>

> I'll stick to my manual hack until the next SIP release.

The semantics of:

%MappedType  plSMat<plSquareMatrix<double>, 3>

is the same as:

%MappedType SomeTypenameSipLikes

"SomeTypeNameSipLikes" is just a name for the
mapping - it has no other significance (other
than sip has to be able to parse it). In the
.sip file you then replace the template based
name with the new name:

plSMat<plSquareMatrix<double>, 3> someMethod ();

becomes:

SomeTypenameSipLikes someMethod ();

Inside the %Convert* blocks you use the
original template-based name, unless you
typedef the original name to the new name
someplace (like in the %MappedType's
%HeaderCode block) - the %Convert* code
gets parsed by gcc, but not by sip (more
or less).

You can modify the sip-generated C++ code,
but it's a pain when you do maintenance
or upgrades or if you find another bug in
your .sip file - any time you have to
re-generate the code you have to re-patch.


Jim





More information about the Python-list mailing list