I have a class interface I expose to python that has methods such as begin, end, rbegin, rend. Its meant to be a class that C++ can iterate over. I now want to make the object defined in python, so python can pass the C++ library an object of python's class and C++ can use it like it would any real C++ object derived from the same interface. Since python does not really have a concept of begin, end, rbegin, rend, I thought a good idea would be to have the python class define a __iter__ method and use that method with stl_input_iterator to pull in the complete list from python to use with begin, end, etc.
What I have currently is a python converter for tuples of size 2 to std pairs, then the wrapper class for the interface calls > struct IFooHolder_wrapper : IFooHolder, bp::wrapper< IFooHolder > > { > mutable std::map< std::string, boost::shared_ptr< IFoo > > _map; > const_iterator begin() const > { > std::copy( bp::stl_input_iterator< std::pair< std::string, boost::shared_ptr< IFoo > > >( bp::object( bp::handle<>( bp::borrowed( bp::detail::wrapper_base_::get_owner(*this) ) ) ) ), bp::stl_input_iterator< std::pair< std::string, boost::shared_ptr< IFoo > > >(), std::inserter( _map, _map.begin() ) ); > return _map.begin(); > } to copy all the iterations into a map the wrapper holds. Then the begin, end, rbegin, rend methods return iterations from that map. My main concern is firstly if there is a better way. More elegant solutions like the map indexing suite do not really work on this problem, and google can only help so much. I fear there is not much documentation from others trying to do the same thing. I especially do not like "bp::object( bp::handle<>( bp::borrowed( bp::detail::wrapper_base_::get_owner(*this) ) ) )" >From my understanding of stl_input_iterator, it needs a bp::object that has an "__iter__" attribute. I want to use this->get_override( "__iter__" ) but that does not work. So if someone knows a better way to build a bp::object from a bp::wrapper class that would be a good start. I should mention my solution compiles but does not work. Python crashes when it tries to do the std::copy Thanks for any input
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig