<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Since I didn't find any solution when using map_indexing_suite, I wrote a simple wrapping that works in my case :<div><br></div><div>==============</div><div><div><font class="Apple-style-span" face="Courier">#include <map></font></div><div><font class="Apple-style-span" face="Courier">#include <boost/python.hpp></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">namespace myProject {</font></div><div><font class="Apple-style-span" face="Courier">template<class Key, class Val></font></div><div><font class="Apple-style-span" face="Courier">struct map_item {</font></div><div><font class="Apple-style-span" face="Courier"> typedef std::map<Key,Val> Map;</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"> static Val get(Map & self, const Key idx) {</font></div><div><font class="Apple-style-span" face="Courier"> if (self.find(idx) == self.end()) {</font></div><div><font class="Apple-style-span" face="Courier"> PyErr_SetString(PyExc_KeyError,"Map key not found");</font></div><div><font class="Apple-style-span" face="Courier"> throw_error_already_set();</font></div><div><font class="Apple-style-span" face="Courier"> }</font></div><div><font class="Apple-style-span" face="Courier"> return self[idx];</font></div><div><font class="Apple-style-span" face="Courier"> }</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"> static void set(Map& self, const Key idx, const Val val) { self[idx]=val; }</font></div><div><font class="Apple-style-span" face="Courier"> static void del(Map& self, const Key n) { self.erase(n); }</font></div><div><font class="Apple-style-span" face="Courier"> static bool in (Map const& self, const Key n) { return self.find(n) != self.end(); }</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"> static list keys(Map const& self) {</font></div><div><font class="Apple-style-span" face="Courier"> list t;</font></div><div><font class="Apple-style-span" face="Courier"> for(typename Map::const_iterator it = self.begin() ; it!=self.end() ; ++it)</font></div><div><font class="Apple-style-span" face="Courier"> t.append(it->first);</font></div><div><font class="Apple-style-span" face="Courier"> return t;</font></div><div><font class="Apple-style-span" face="Courier"> }</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"> static list values(Map const& self) {</font></div><div><font class="Apple-style-span" face="Courier"> list t;</font></div><div><font class="Apple-style-span" face="Courier"> for(typename Map::const_iterator it=self.begin(); it!=self.end(); ++it)</font></div><div><font class="Apple-style-span" face="Courier"> t.append(it->second);</font></div><div><font class="Apple-style-span" face="Courier"> return t;</font></div><div><font class="Apple-style-span" face="Courier"> }</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"> static list items(Map const& self) {</font></div><div><font class="Apple-style-span" face="Courier"> list t;</font></div><div><font class="Apple-style-span" face="Courier"> for(typename Map::const_iterator it=self.begin(); it!=self.end(); ++it)</font></div><div><font class="Apple-style-span" face="Courier"> t.append( make_tuple(it->first, it->second) );</font></div><div><font class="Apple-style-span" face="Courier"> return t;</font></div><div><font class="Apple-style-span" face="Courier"> }</font></div><div><font class="Apple-style-span" face="Courier">};</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">#define STL_MAP_WRAPPING_PTR(KEY_TYPE, VALUE_TYPE, PYTHON_TYPE_NAME) \</font></div><div><font class="Apple-style-span" face="Courier"> class_<std::pair<const KEY_TYPE, VALUE_TYPE> >((std::string(PYTHON_TYPE_NAME)+std::string("DATA")).c_str()) \</font></div><div><font class="Apple-style-span" face="Courier"> .def_readonly ("key" , &std::pair<const KEY_TYPE, VALUE_TYPE>::first ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def_readwrite("value", &std::pair<const KEY_TYPE, VALUE_TYPE>::second) \</font></div><div><font class="Apple-style-span" face="Courier"> ; \</font></div><div><font class="Apple-style-span" face="Courier"> class_<std::map<KEY_TYPE, VALUE_TYPE> >(PYTHON_TYPE_NAME) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__len__" , &std::map<KEY_TYPE, VALUE_TYPE>::size) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__iter__" , boost::python::iterator<std::map<KEY_TYPE, VALUE_TYPE>, return_internal_reference<> >()) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__getitem__" , &map_item<KEY_TYPE, VALUE_TYPE>().get, return_internal_reference<>()) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__setitem__" , &map_item<KEY_TYPE, VALUE_TYPE>().set ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__delitem__" , &map_item<KEY_TYPE, VALUE_TYPE>().del ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__contains__", &map_item<KEY_TYPE, VALUE_TYPE>().in ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("clear" , &std::map<KEY_TYPE, VALUE_TYPE>::clear ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("has_key" , &map_item<KEY_TYPE, VALUE_TYPE>().in ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("keys" , &map_item<KEY_TYPE, VALUE_TYPE>().keys ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("values" , &map_item<KEY_TYPE, VALUE_TYPE>().values) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("items" , &map_item<KEY_TYPE, VALUE_TYPE>().items ) \</font></div><div><font class="Apple-style-span" face="Courier"> ;</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">#define STL_MAP_WRAPPING(KEY_TYPE, VALUE_TYPE, PYTHON_TYPE_NAME) \</font></div><div><font class="Apple-style-span" face="Courier"> class_<std::pair<const KEY_TYPE, VALUE_TYPE> >((std::string(PYTHON_TYPE_NAME)+std::string("DATA")).c_str()) \</font></div><div><font class="Apple-style-span" face="Courier"> .def_readonly ("key" , &std::pair<const KEY_TYPE, VALUE_TYPE>::first ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def_readwrite("value", &std::pair<const KEY_TYPE, VALUE_TYPE>::second) \</font></div><div><font class="Apple-style-span" face="Courier"> ; \</font></div><div><font class="Apple-style-span" face="Courier"> class_<std::map<KEY_TYPE, VALUE_TYPE> >(PYTHON_TYPE_NAME) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__len__" , &std::map<KEY_TYPE, VALUE_TYPE>::size) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__iter__" , boost::python::iterator<std::map<KEY_TYPE, VALUE_TYPE>, return_internal_reference<> >()) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__getitem__" , &map_item<KEY_TYPE, VALUE_TYPE>().get ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__setitem__" , &map_item<KEY_TYPE, VALUE_TYPE>().set ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__delitem__" , &map_item<KEY_TYPE, VALUE_TYPE>().del ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("__contains__", &map_item<KEY_TYPE, VALUE_TYPE>().in ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("clear" , &std::map<KEY_TYPE, VALUE_TYPE>::clear ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("has_key" , &map_item<KEY_TYPE, VALUE_TYPE>().in ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("keys" , &map_item<KEY_TYPE, VALUE_TYPE>().keys ) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("values" , &map_item<KEY_TYPE, VALUE_TYPE>().values) \</font></div><div><font class="Apple-style-span" face="Courier"> .def("items" , &map_item<KEY_TYPE, VALUE_TYPE>().items ) \</font></div><div><font class="Apple-style-span" face="Courier"> ;</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">} // namespace</font></div><div>=================</div><div><br></div><div><br></div><div><br></div><div>Simply use STL_MAP_WRAPPING_PTR(KeyClass, ClassA*, "ClassAMap") to bind a map<KeyClass, ClassA*></div><div>or STL_MAP_WRAPPING(KeyClass, ClassB, "ClassBMap") to bind a map<KeyClass, ClassB></div><div><br></div><div>This code works in my case, fell free to correct or complete any error / missing.</div><div><br></div><div><div>-------------------------------</div><div>Damien Dupuis</div></div><div><br></div><div><div><div>Le 12 juil. 2010 à 09:13, Pentix a écrit :</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><br>Hi, Damien!<br><br>I've got exactly the same problem... Have you got any achievements?<br><br><br><br>Damien Dupuis wrote:<br><blockquote type="cite"><br></blockquote><blockquote type="cite">error: no match for call to ‘(const<br></blockquote><blockquote type="cite">boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<X*>)<br></blockquote><blockquote type="cite">(X*)‘<br></blockquote><blockquote type="cite"><br></blockquote><br>-- <br>View this message in context: <a href="http://old.nabble.com/Problem-with-map_indexing_suite-tp28925347p29135982.html">http://old.nabble.com/Problem-with-map_indexing_suite-tp28925347p29135982.html</a><br>Sent from the Python - c++-sig mailing list archive at <a href="http://Nabble.com">Nabble.com</a>.<br><br>_______________________________________________<br>Cplusplus-sig mailing list<br><a href="mailto:Cplusplus-sig@python.org">Cplusplus-sig@python.org</a><br>http://mail.python.org/mailman/listinfo/cplusplus-sig<br><br></div></blockquote></div><br><div>
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div><br></div><div><br></div></div><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>
<br></div></div></body></html>