Hello, <br><br>I've got a question about the bindings of iterators.<br><br>Given a C++ code which look more or less like that:<br><br><div style="margin-left: 40px;">template &lt;class O&gt;<br>class C {<br>&nbsp;&nbsp;&nbsp; It&lt;O&gt; the_begin() {...}
<br><br>&nbsp;&nbsp;&nbsp; It&lt;O&gt; the_end() {...}<br><br>&nbsp;&nbsp;&nbsp; It2&lt;O&gt; foo(it&lt;O&gt;) {...}<br><br>}<br><br>template &lt;class O&gt;<br>class It {<br>&nbsp;&nbsp; //... define everything that an iterator must define ... <br>}<br></div><br>
The C++ code to bind a version of the previous class C could be : <br><br><div style="margin-left: 40px;">class MyO {<br>&nbsp;&nbsp; //define some methods<br>}<br><br>typedef C&lt;MyO&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyC;<br>typedef It&lt;MyO&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyIt;
<br><br>class_&lt;MyO&gt;(&quot;MyO&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(...)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...;<br><br>//class _&lt;MyIt&gt;(&quot;MyIt&quot;)<br>// &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(...)<br>// &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...;<br><br>class_&lt;MyC&gt;(&quot;MyC&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;the_iter&quot;, range(&amp;MyC::the_begin , &amp;MyC::the_end))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;foo&quot;, MyC::foo)<br></div>
<br>As expected, in Python the method MyC.the_iter will return some instances of the class MyO.<br>But, the method MyC::foo expect a MyIt as argument... So, I can't do something like that :<br><br>myC = MyC()<br>for bar in myC:
<br>&nbsp;&nbsp;&nbsp; assert type(bar) == MyO<br>&nbsp;&nbsp;&nbsp; x = myC.foo(bar)<br>&nbsp;&nbsp;&nbsp; ...<br><br>In other words, Is there a way to define MyC like that : <br><div style="margin-left: 40px;">class_&lt;MyC&gt;(&quot;MyC&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .def(&quot;the_iter&quot;, range_bis(&amp;MyC::the_begin , &amp;MyC::the_end))
<br></div><br>Which could allow me to do something like:<br>myC = MyC()<br>
for bar in myC:<br>
&nbsp;&nbsp;&nbsp; assert type(bar) == MyIt<br>
&nbsp;&nbsp;&nbsp; x = myC.foo(bar)<br>
&nbsp;&nbsp;&nbsp; ...<br>
<br>If you have any suggestion... <br><br>Thanks in advance.<br><br>Cyril<br>