On Tuesday 05 August 2008 16:43:36 Jonny Morrill wrote: > Hello, > > 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: > > (using Object as an example class name) > > Item* Object::next(); > Item* Object::operator[](int index); > Object* Object::__iter__(); > > When I create a python object I now can do something like: > > object = Object() > . > . > . > for *item* in *object*: > // item is an Item object > > This causes an infinite loop and I am pretty sure that it is because the > Item* Object::next(); function is missing the raise StopIteration 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!! > > Also, if there is a better way to do this I would be happy to hear it! >
I can't answer your question about StopIteration exception, but I have iteration working fine with my bindings by simply implementing __len__ and operater[]. I have no __iter__ or next functions. There's probably more efficient ways to do it(especially depending on your operator[] implementation), but it works. Matt _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
