<div dir="ltr">Hello,<br><br>I have just started using sip to create python extensions for a few of my C++ libraries. I have had success with most everything I wanted to do. There is one thing I could use some help with, though. I wanted to use one of my C++ classes as if it were an iterable python object. To get this to work, I implemented the required functions in my C++ code:<br>
<br>(using <span style="font-family: courier new,monospace;">Object</span> as an example class name)<br><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Item* Object::next();</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Item* Object::</span><span style="font-family: courier new,monospace;">operator[](int index);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">Object* Object::</span><span style="font-family: courier new,monospace;">__iter__();<br>
<br style="font-family: arial,sans-serif;"><span style="font-family: arial,sans-serif;">When I create a python object I now can do something like:<br><br><span style="font-family: courier new,monospace;">object = Object()<br>
.<br>.<br>.<br></span><font face="courier new,monospace">for <b>item</b> in <b>object</b>:<br>&nbsp; // item is an Item object<br><br style="font-family: arial,sans-serif;"><span style="font-family: arial,sans-serif;">This causes an infinite loop and I am pretty sure that it is because the&nbsp;<span style="font-family: courier new,monospace;"></span></span></font></span></span><span style="font-family: courier new,monospace;">Item* Object::next();</span><span style="font-family: courier new,monospace;"><span style="font-family: arial,sans-serif;"><font face="courier new,monospace"><span style="font-family: arial,sans-serif;"><span style="font-family: courier new,monospace;"> </span>function is missing the <span style="font-family: courier new,monospace;">raise StopIteration <font face="arial,sans-serif">exception that is present in all python iterable objects. I think that using the %Exception directive in my specification file should lead me to a solution, but the syntax is somewhat confusing to me. I actually do not have mush experience with exceptions in C++ so a basic explanation of what needs to be coded in both the C++ and .sip file would be very much appreciated!!<br>
<br>Also, if there is a better way to do this I would be happy to hear it!<br><br>Thanks!<br><br>- Jonny<br></font></span> </span></font></span></span><pre><code><br></code></pre><span style="font-family: courier new,monospace;"><span style="font-family: arial,sans-serif;"><font face="courier new,monospace"><span style="font-family: arial,sans-serif;"></span><br style="font-family: courier new,monospace;">
</font></span></span></div>