Simon W <simwarg <at> gmail.com> writes:
From my research it seems not very trivial to wrap std::vector that holds
pointer types. For example: std::vector<GameObject*>I've looked at boost python vector_index_suite but it just gives me the runtime error:> TypeError: No to_python (by-value) converter found for C++ type:> GameObject*I have already exposed GameObject: class_<GameObject>("
GameObject") ... So it have come to my understanding it's not possible with an out of the box solution. I have to do some kind of wrapper? Could someone just help me out where I should start?Thank you!
I've come across this before as well and use the following to provide support for vectors of pointers. I only need to iterate over them so have only modified the __iter__ method. template <class Container> class vector_ptr_indexing_suite : public vector_indexing_suite<Container, true, vector_ptr_indexing_suite<Container>> { public: typedef iterator<Container, return_value_policy<reference_existing_object>> def_iterator; template <class Class> static void extension_def(Class & cl) { vector_indexing_suite<Container, true, vector_ptr_indexing_suite<Container>>::extension_def(cl); cl.def("__iter__", def_iterator()); } }; class_<std::vector<Object*>>("ObjectContainer") .def(vector_ptr_indexing_suite<std::vector<Object*>>()) ; You may want to override functions such as get_item, whose implementation might look like: static object get_item(Container& container, index_type i) { return object(ptr(container[i])); } Anyway have a good look in vector_indexing_suite.hpp to see what is there and what you might need to hack at.