I'm trying to wrap a whole C++ that contains a lot of access to std::vector and std::map.
I managed to wrap vectors but i've got problems with maps. The following simple example fails to compile with the error: error: no match for call to ‘(const boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<X*>) (X*)‘ ==================================================== #include <boost/python.hpp> #include <boost/python/suite/indexing/vector_indexing_suite.hpp> #include <boost/python/suite/indexing/map_indexing_suite.hpp> using namespace boost::python; class X { public: X(std::string s): _s(s) {} std::string const repr() { return _s; } private: std::string _s; }; class Y { public: Y(): _vec(), _map() {}; void addToVec(X* x) { _vec.push_back(x); } void addToMap(int i, X* x) { _map[i] = x; } const std::vector<X*>& getXVec() { return _vec; } const std::map<int, X*>& getXMap() { return _map; } private: std::vector<X*> _vec; std::map<int, X*> _map; }; BOOST_PYTHON_MODULE(pyTEST) { class_<X, X*>("X", init<std::string>()) .def("__repr__", &X::repr) ; class_<std::vector<X*> >("XVec") .def(vector_indexing_suite<std::vector<X*>, true>()) ; class_<std::map<int, X*> >("XMap") .def(map_indexing_suite<std::map<int, X*>, true>()) ; class_<Y>("Y", init<>()) .def("addToVec", &Y::addToVec) .def("addToMap", &Y::addToMap) .def("getXVec" , &Y::getXVec , return_internal_reference<>()) .def("getXMap" , &Y::getXMap , return_internal_reference<>()) ; } ==================================================== I tried to use boost::shared_ptr<X> instead of X* in this small example and it works, but I would like not to have to correct all my existing C++ code to use boost::shared_ptr. And since it works well with std::vector<X*>, I think it should work with maps. Some google search make me think I should add a return_value_policy to the __getitem__ method of std::map<int, X*> class, but when I try I get the error error: address of overloaded function with no contextual type information I'm clearly doing something wrong here. Thanks for any help/advice. FYI: I'm using boost 1.42.0, with g++ 4.2.1 on snow leopard (10.6.3) ------------------------------- Damien Dupuis _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig