[C++-sig] Iterators for heterogeneous container

troy d. straszheim troy at resophonic.com
Sat Nov 7 20:45:22 CET 2009


Thomas Daniel wrote:
> 
> BOOST_PYTHON_MODULE(vegetables)
> {
>    class_<Garden>("Garden")
>        .def("get_potatoes", &Garden::get_potatoes)
>        .def("get_tomatoes", &Garden::get_tomatoes)
>    ;
>    class_<TomatoIter>("TomatoIter")
>        .def("__iter__", &TomatoIter::get_next)
>    ;
> }
> 
> That at least compiles - unlike all my previous attempts that generate 
> three pages of template errors - but python complain:
> 
> TypeError: iter() returned non-iterator of type 'Tomato'
> 
> so now I am trying to figure out how to tell boost that get_tomatoes 
> returns an iterator ...
> 

Please don't top-post, guys

As you know, python iterators have a function next() that returns the 
next object in the iteree, or throw StopIteration when they're at the 
end.  As you also know, python expects member functions __iter__() to 
return an iterator.  Is the thing returned by TomatoIter::get_next an 
iterator, ie does it implement the iterator interface?

-t



More information about the Cplusplus-sig mailing list