我使用boost::python
编写了一个接口。有两个名为AA
和BB
的类,并且BB具有一个名为get_AA
的函数,该函数是AA
的返回对象数组。这是我编写的代码。
AA级
class AA{
int height;
//constructors
AA(){}
AA(map<string,string> data){}
}
BB级
class BB{
//constructor
BB(std::string url){}
//method
AA * get_AA(){
AA * blockRangeArray = new AA[SIZE];
//getting data from SQL-Lite
std::vector <std::map<string,string>> rangeData;
rangeData = xx.data(); //this works fine
for(int x = 0; x <= SIZE; x++){
std::map<string,string> slaveBlkMap;
slaveBlkMap = rangeData[x];
Block *blk = new Block(slaveBlkMap);
blockRangeArray[x] = *blk;
}
return blockRangeArray;
}
}
这是我的 BOOST_PYTHON_MODULE
BOOST_PYTHON_MODULE(mylib){
using namespace boost::python;
class_<BB>("BB", init<std::string>())
.def("get_AA", &BB::get_AA, boost::python::return_value_policy<boost::python::manage_new_object>());
class_< AA >("AA");
这将创建mylib.so共享库。然后我在python中使用了它。如下。
run.py
import mylib
data1 = mylib.BB("dfsfs");
AA_class_object_Array = data1.get_AA() #expecting array of AA objects
但是在编译和运行时,此代码给我一个错误,分段错误(内核已转储)。