没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论























使用使用pybind11封装封装C++结构体作为参数的函数实现步骤结构体作为参数的函数实现步骤
主要介绍了用pybind11封装C++结构体作为参数的函数实现步骤,本文分步骤通过实例代码给大家介绍的非常
详细,具有一定的参考借鉴价值,需要的朋友可以参考下
python调用C/C++有不少的方法,如boost.python, swig, ctypes, pybind11等,这些方法有繁有简,而pybind11的优点是对
C++ 11支持很好,API比较简单,现在我们就简单记下Pybind11的入门操作。
pybind11简介简介
pybind11是一个轻量级的只包含头文件的库,它主要是用来在已有的 C++代码的基础上做扩展,它的语法和目标非常像
Boost.Python,但Boost.Python为了兼容现有的基本所有的C++编译器而变得非常复杂和庞大,而因此付出的代价是很多晦涩
的模板技巧以及很多不必要的对旧版编译器的支持。Pybind11摒弃了这些支持,它只支持python2.7以上以及C++ 11以上的编
译器,使得它比Boost.Python更加简洁高效。
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明
为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员
(member),且这些成员可以为不同的类型,成员一般用名字访问。
结构体、结构体指针作为函数的参数应用的非常广泛,本文介绍如何使用pybind11封装C++结构体作为参数的函数。
一一.需求分析需求分析
现有名为 student 的结构体,有5个成员变量 name,Chinese,Mathematics,English和total ,构造函数通过name生成实
例,成员函数 setName 可以给实例的name赋值;
calc 函数接收一个student实例作为参数,通过三门课程的分数计算出总分 total ;
将student,calc封装到包含一个student类和一个calc函数的python模块( abctest )中。
二二.实现步骤实现步骤
1. 在头文件中定义student结构体,并声明calc函数;
2. 在C++源文件中实现func.cpp函数;
3. 编写pybind11封装函数;
4. 用python编写setup脚本;
5. 编译生成动态链接库;
6. 测试函数功能。
三三.代码实现代码实现
在头文件中定义student结构体,并声明calc函数
//文件名:whjy.h
#include <string>
using namespace std;
struct student{
string name;
int Chinese;
int Mathematics;
int English;
int total;
student(string n){
this->name = n;
}
void setName(string stuName){
this->name = stuName;
}
};
void calc(struct student&);
在C++源文件中实现func.cpp函数
//文件名:func.cpp
#include "whjy.h"
#include <string>
void calc(struct student& tyh){
tyh.total = tyh.Chinese + tyh.Mathematics + tyh.English;
}
编写pybind11封装函数
//文件名:func_wrapper.cpp
资源评论


weixin_38677505
- 粉丝: 4
- 资源: 971
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
