<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>