pybind11使用(3) 使用stl容器
假设c++侧读到的数据是一个结构体, 定义如下:
struct AirwayData
{
int uavId;
int routeId;
std::vector<int> longitude;
std::vector<int> latitude;
std::vector<float> altitude;
std::vector<float> speed;
};
这时导出时需要针对struct的每一个用到的变量进行导出
pybind11::class_<AirwayData>(m, "AirwayData")
.def(pybind11::init<>())
.def_readonly("uavId", &AirwayData::uavId)
.def_readonly("routeId", &AirwayData::routeId)
.def_readonly("longitude", &AirwayData::longitude)
.def_readonly("latitude", &AirwayData::latitude)
.def_readonly("altitude", &AirwayData::altitude)
.def_readonly("speed", &AirwayData::speed);
如果在python端调用时访问了vector,则会异常退出
此时我做了个很坑的操作,把vector全部换成了list, 即:
struct AirwayData
{
int uavId;
int routeId;
pybind11::list longitude;
pybind11::list latitude;
pybind11::list altitude;
pybind11::list speed;
};
欸,可以正常访问了,但是只能调用一次就会异常退出,应该是pybind11::list的问题,可能是和python的引用计数什么的有关系?
正确做法是#include <pybind11/stl.h>
, 这样pybind11会自动把vector转换为python的list, 文档