我想使用pybind11将c++的类编译供python调用,其他方法都正常,就是在获取c++类中vector内容时失败。具体代码如下
C++代码如下
#include<string>
#include<vector>
#include<map>
#include<algorithm>
#include<pybind11/pybind11.h>
#include<pybind11/stl.h>
namespace py = pybind11;
using namespace std;
class MyClass
{
public:
MyClass(){}
void add_bi(int v) {
this->bi.push_back(v);
}
//问题:vector返回到python时,无法转换为list对象
py::list bi_array() {
return py::cast(bi);
}
int get_index(int v) {
vector<int>::iterator it = find(bi.begin(), bi.end(), v);
if (it == bi.end()) {
return -1;
}
else {
return (&*it - &bi[0]); //返回vector下标值
}
}
vector<int> bi;
};
PYBIND11_MAKE_OPAQUE(std::vector<int>);
PYBIND11_MODULE(ex, m) {
py::class_<MyClass>(m, "MyClass")
.def(py::init<>())
.def_readwrite("bi", &MyClass::bi)
.def("add_bi", &MyClass::add_bi)
.def("get_index", &MyClass::get_index)
.def("bi_array", &MyClass::bi_array);
}
如图中所示,我的导入模块,调用其他方法如add_bi、get_index都是成功的,就是在得到C++类中的vector类型bi时失败,求助各位大神应该如何处理啊,非常感谢!