<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am trying to create a wrapper for a template class with non type template parameter but the SIP throws syntax error. Is there a work around to the code below?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">array.h<o:p></o:p></p>
<p class="MsoNormal">------------------------------------------<o:p></o:p></p>
<p class="MsoNormal">template <typename T,int SIZE><o:p></o:p></p>
<p class="MsoNormal">class array {<o:p></o:p></p>
<p class="MsoNormal"> T var[SIZE];<o:p></o:p></p>
<p class="MsoNormal">public:<o:p></o:p></p>
<p class="MsoNormal"> T getValue(int index);<o:p></o:p></p>
<p class="MsoNormal"> void setValue(int index,T val);<o:p></o:p></p>
<p class="MsoNormal">};<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">template<typename T,int SIZE> T array<T,SIZE>::getValue(int index)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"> return var[index];<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">template<typename T,int SIZE> int array<T,SIZE>::getSize()<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"> return SIZE;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">template<typename T,int SIZE> void array<T,SIZE>::setValue(int index, T val)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"> var[index]=val;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">array.sip<o:p></o:p></p>
<p class="MsoNormal">--------------------------------------------------------<o:p></o:p></p>
<p class="MsoNormal">%MappedType array<int,10> /DocType="array-of-int"/ <<<<<<<< Syntax error.<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">%TypeHeaderCode<o:p></o:p></p>
<p class="MsoNormal">#include "array.h"<o:p></o:p></p>
<p class="MsoNormal">%End<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">%ConvertFromTypeCode<o:p></o:p></p>
<p class="MsoNormal"> //Create the list<o:p></o:p></p>
<p class="MsoNormal"> PyObject *l;<o:p></o:p></p>
<p class="MsoNormal"> if((l = PyList_New(sipCpp->getSize())) == NULL)<o:p></o:p></p>
<p class="MsoNormal"> return NULL;<o:p></o:p></p>
<p class="MsoNormal"> //Set the list elements<o:p></o:p></p>
<p class="MsoNormal"> for(int i=0; i < sipCpp->getSize); ++i)<o:p></o:p></p>
<p class="MsoNormal"> {<o:p></o:p></p>
<p class="MsoNormal"> PyObject *tobj;<o:p></o:p></p>
<p class="MsoNormal"> if ((tobj = SIPLong_FromLong(sipCpp->getValue(i))) == NULL)<o:p></o:p></p>
<p class="MsoNormal"> {<o:p></o:p></p>
<p class="MsoNormal"> Py_DECREF(l);<o:p></o:p></p>
<p class="MsoNormal"> return NULL;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> PyList_SET_ITEM(l, i, tobj);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> return l;<o:p></o:p></p>
<p class="MsoNormal">%End<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">%ConvertToTypeCode<o:p></o:p></p>
<p class="MsoNormal"> SIP_SSIZE_T len;<o:p></o:p></p>
<p class="MsoNormal"> // Check the type if that is all that is required.<o:p></o:p></p>
<p class="MsoNormal"> if (sipIsErr == NULL)<o:p></o:p></p>
<p class="MsoNormal"> {<o:p></o:p></p>
<p class="MsoNormal"> return (PySequence_Check(sipPy) && PySequence_Size(sipPy) >= 0);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> array<int,10> *ql = new array<int,10>();<o:p></o:p></p>
<p class="MsoNormal"> len = PySequence_Size(sipPy);<o:p></o:p></p>
<p class="MsoNormal"> for (SIP_SSIZE_T i = 0; i < len; ++i)<o:p></o:p></p>
<p class="MsoNormal"> {<o:p></o:p></p>
<p class="MsoNormal"> PyObject *itm = PySequence_ITEM(sipPy, i);<o:p></o:p></p>
<p class="MsoNormal"> PyErr_Clear();<o:p></o:p></p>
<p class="MsoNormal"> long val = itm ? SIPLong_AsLong(itm) : -1;<o:p></o:p></p>
<p class="MsoNormal"> if(!itm || (val == -1 && PyErr_Occurred()))<o:p></o:p></p>
<p class="MsoNormal"> {<o:p></o:p></p>
<p class="MsoNormal"> Py_DECREF(itm);<o:p></o:p></p>
<p class="MsoNormal"> delete ql;<o:p></o:p></p>
<p class="MsoNormal"> *sipIsErr = 1;<o:p></o:p></p>
<p class="MsoNormal"> return 0;<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> ql->setValue(i,val);<o:p></o:p></p>
<p class="MsoNormal"> Py_DECREF(itm);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> *sipCppPtr = ql;<o:p></o:p></p>
<p class="MsoNormal"> return sipGetState(sipTransferObj);<o:p></o:p></p>
<p class="MsoNormal">%End<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">};<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks<o:p></o:p></p>
<p class="MsoNormal">Sri<o:p></o:p></p>
</div>
</body>
</html>