首页 > 其他分享 >pybind11使用(3) 使用stl容器

pybind11使用(3) 使用stl容器

时间:2022-09-22 15:49:02浏览次数:76  
标签:AirwayData stl list readonly vector pybind11 使用 def

假设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, 文档

标签:AirwayData,stl,list,readonly,vector,pybind11,使用,def
From: https://www.cnblogs.com/miyanyan/p/16719518.html

相关文章

  • WebForm中的treeView的简单使用
    我们要使用treeView,首先需要对应树状图关系的表结构,如省市区的结构,大概如下 完成效果图(省市区结构),大概如下: 新增一个citys.aspx页面,在页面中添加treeView<div>......
  • CyclicBarrier使用详解
    1.CyclicBarrier是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。它的作用就是会让所有线程都等待完成后才会继......
  • 房产中介管理软件第7课:T4模板的使用
    因为创建Model、Repository、Service、Controller有大量重复的工作。除了一些通用的方法会整合到BaseRepository和BaseService里,剩余的还需要自定义。这时候就需要T4模板......
  • spring切面的使用
    1、切面的定义首先要理解‘切’字,需要把对象想象成一个立方体,传统的面向对象变成思维,类定义完成之后(封装)。每次实例化一个对象,对类定义中的成员变量赋值,就相当于对这个立......
  • Windows中使用Docker安装Redis
    1、拉取Redis以管理员身份运行CMD,执行如下命令拉取Redisdockerpullredis2、在D盘新建目录D:\Net_Program\Net_Docker\Redis 在D盘新建D:\Net_Program\Net_Doc......
  • JSTL标签库(JSP标准标签库)
    JSTL标签库(JSP标准标签库)JSTL(JSPStandardTagLibrary,核心标签库)是JSP标签的集合,它封装了JSP应用的通用核心功能。JSP标签是一组与HTML标签相似,但又比HTML标签......
  • Java中使用Hutool的ExecutorBuilder实现自定义线程池
    场景Java中ExecutorService线程池的使用(Runnable和Callable多线程实现):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126242904SpringBoot+Lombok+Bui......
  • java - @Async 具体使用
    1.开启  @Async异步能力添加注解 @EnableAsync,可以放在启动类上,也可以在任意配置类上,因为我是需要配置自定义线程池,因此放在配置类上importorg.springframework.c......
  • 使用 BigQuery ML 的自动化机器学习 (AutoML)。轻松启动机器学习并验证 ML 是否值得投
    使用BigQueryML的自动化机器学习(AutoML)。轻松启动机器学习并验证ML是否值得投资。机器学习在许多行业中变得越来越流行,从金融到营销再到医疗保健。但让我们面对......
  • 使用cpolar为Ubuntu的网站配置有特色的地址
    在现代人的工作和生活中,互联网是必不可少的重要组成部分,无论是放松娱乐还是工作学习,都离不开互联网,想要在信息庞杂的互联网世界立足,吸引广大访客前来围观,不仅需要优质的网......