Ops,<br>Sorry disregards previous message...fat fingers...<br><br>I Hi,<br>I have a class template with a member function template as follow<br><br>template&lt;class A, class B&gt;<br>class test&nbsp; {<br>public:<br><br>&nbsp;........&nbsp; Some member functions
<br><br>&nbsp; template&lt;class L&gt;<br>&nbsp; L keys() const&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L list;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return L;<br>};<br><br><br>I created a function to export the template in the following way<br><br>template&lt;class A, class B, class L&gt;
<br>void export_test(string name)&nbsp; {<br><br>typedef test&lt;A,B&gt; etest;<br><br>class_&lt;etest&gt;(name.c_str())<br>&nbsp;&nbsp; .....&nbsp; Implemented all the member functions<br>&nbsp;&nbsp; .def(&quot;keys&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;etest::keys&lt;L&gt;)&nbsp;&nbsp;&nbsp;&nbsp; **** trying to implement the member function template
<br>;<br><br>}<br><br>and used the export_test class to export to python. For example<br><br>export_test&lt;double,double&gt;(&quot;test_real&quot;);<br><br>Everything works fine if I comment<br>.def(&quot;keys&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;etest::keys&lt;L&gt;) 
<br>in the export_test. All the member functions of test are available in Python.<br><br>However if I insert the .def(&quot;keys&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;etest::keys&lt;L&gt;)&nbsp; the code will not compile!!!<br><br>Am I missing something?
<br><br>Thanks Luca<br><br><br><br><br><br><br><div><span class="gmail_quote">On 29/08/2007, <b class="gmail_sendername">Luca Sbardella</b> &lt;<a href="mailto:luca.sbardella@gmail.com">luca.sbardella@gmail.com</a>&gt; wrote:
</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br>I have a class template with a function template as follow<br><br>template&lt;class A, ...., class Z&gt;
<br>class test&nbsp; {<br>public:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; typedef D&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; key_type;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; typedef T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; data_type;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; typedef keyvaluepair&lt;D,T&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value_type;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; typedef typename vector_composite&lt;value_type&gt;::container&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; container;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; typedef typename container::iterator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; iterator;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; typedef typename container::const_iterator&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; const_iterator;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dataserie(){}
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// \brief search for a key_type<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// @return If the return value is not negative than it represents the index associated with the value_type d,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// otherwise idx = -return-1 representes the index where the element would be inserted if added to the container.
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; qm_long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; search(const key_type&amp; key)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// \brief check whether the value_type d is available<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; contains(const key_type&amp; key)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const {if(this-&gt;search(key)&lt;0) return false; return true;}
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// \brief get the index associated with the key_type t<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; qm_Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; index(const key_type&amp; t)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// @param Time in years @returns the index i such that grid[i] is closest to t
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; qm_Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; closestIndex(const key_type&amp; t) const;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// @param Time in years @return closest time on grid<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; const value_type&amp; &nbsp;&nbsp;&nbsp; closestValue(const key_type&amp; t)&nbsp; const { return this-&gt;get(this-&gt;closestIndex(t));}
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// \brief The Add method<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// This member function should be used to add new elements to the timeserie<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// @param d The date<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// @param value The value associated with d
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; void add(const key_type&amp; key, const data_type&amp; value = data_type());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; template&lt;class L&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; L keys() const {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; L list;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //for(const_iterator it = this-&gt;begin();it!=this-&gt;end();++it)&nbsp; 
list.append(it-&gt;key());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return list;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //template&lt;class L&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //L values()&nbsp; {return m_values.dataToList&lt;L&gt;();}<br>&nbsp;&nbsp;&nbsp; protected:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; void insert(qm_Size pos, const value_type&amp; kv) { this-&gt;vector().insert(this-&gt;vector().begin()+pos,kv);}
<br>&nbsp;&nbsp;&nbsp; };<br><br>
</blockquote></div><br>