2012-07-27 87 views
0

我想創建一個python使用Boost Python的升壓Python綁定一類

#include <boost/python.hpp> 
#include <boost/python/suite/indexing/vector_indexing_suite.hpp> 
#include <vector> 

using namespace boost::python; 

struct World 
{ 
    void set(std::string msg) { this->msg = msg; } 

    std::string greet() { return msg; } 

    MyList2 getList() { 
     MyList v1(5, 1), v2(10, 2); 
     MyList2 v; 
     v.push_back(v1); 
     v.push_back(v2); 
     std::cout<<"In C++: "<<v.size()<<std::endl; 
     return v; 
    } 

    std::string msg; 
}; 


BOOST_PYTHON_MODULE(test_ext) 
{ 
    class_< std::vector<World> >("MyList") 
     .def(vector_indexing_suite< std::vector<World> >()); 

    class_<World>("World") 
     .def("greet", &World::greet) 
     .def("set", &World::set) 
     .def("list", &World::getList) 
    ; 
} 

一個C++類結合的載體,但我得到的編譯錯誤與向量索引套房試圖把一個類的載體時, 。

no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = World*, _Container = std::vector<World>, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = World&]() == __val’ 
+0

定義'MyList'和'MyList2' – 2016-03-10 08:06:28

回答

2

Python列表比C++向量有更多的功能。 vector_indexing_suite定義了contains方法,因此您的容器類必須定義operator==

+0

對不起,我忘了怎麼辦代碼標記。現在修復。 – 2012-07-27 20:54:37

+0

我從85英里每小時的汽車上在平板電腦上輸入這個答案。不會再嘗試:) – 2012-07-27 21:08:49