现有若干用C++编写的函数,为了能够用Python调用它们,可以通过pybind11将它们封装到一个Python模块中,在编写Python程序时只要导入该模块便能使用这些函数。

一.实现步骤

用C++函数实现函数功能;

编写头文件,将函数的声明包含在头文件中;

编写pybind11封装函数;

用Python编写setup脚本;

生成动态链接库pyd文件;

测试函数功能。

二.代码实现

1.用C++函数实现函数功能

//文件名:add.cpp

extern "C" double add(double in1, double in2)

{

return in1 + in2;

}

//文件名:sub.cpp

extern "C" double sub(double in1, double in2)

{

return in1 - in2;

}

//文件名:mul.cpp

extern "C" double mul(double in1, double in2)

{

return in1 * in2;

}

//文件名:div.cpp

extern "C" double div1(double in1, double in2)

{

return in1 / in2;

}

2.编写头文件,将函数的声明包含在头文件中

//文件名:functions.h

#ifndef FUNCTIONS_H

#define FUNCTIONS_H

#include

using namespace std;

extern "C" double add(double, double);

extern "C" double sub(double, double);

extern "C" double mul(double, double);

extern "C" double div1(double, double);

#endif

3.编写pybind11封装函数

//文件名:functions_wrapper.cpp

#include

#include "functions.h"

namespace py = pybind11;

PYBIND11_MODULE(functions, m){

m.doc() = "Simple Class";

m.def("add", &add);

m.def("sub", &sub);

m.def("mul", &mul);

m.def("div", &div1);

}

4.用Python编写setup脚本

#文件名:setup.py

from setuptools import setup, Extension

functions_module = Extension(

name = 'functions',

sources = ['add.cpp', 'sub.cpp', 'mul.cpp', 'div.cpp', 'functions_wrapper.cpp'],

include_dirs = [r'D:\software\pybind11-master\include',

r'D:\software\Anaconda\include']

)

setup(ext_modules = [functions_module])

5.生成动态链接库pyd文件

在命令行执行python setup.py build_ext --inplace,在当前路径下生成pyd动态库。

6.测试函数功能

#文件名:test.py

import functions

print(functions.add(0.9, 3))

print(functions.sub(0.9, 3))

print(functions.mul(0.9, 3))

print(functions.div(0.9, 3))

output:

3.9

-2.1

2.7

0.3

python封装c++_用pybind11封装C++实现的函数库相关推荐

  1. sop4封装尺寸图_「光电封装」 有源光器件的结构和封装

    本文来源半导体封装 摘要: 本文对光发送器件.光接收器件以及光收发一体模块等有源光器件的封装类型.材料.结构和电特性等各个方面进行了研究,给出了详细研究结果. 1 有源光器件的分类 一般把能够实现光电 ...

  2. bga封装扇出_扇出型封装为何这么火?

    原标题:扇出型封装为何这么火? --详解扇出型封装技术 2017年依然炙手可热的扇出型封装行业 新年伊始,两起先进封装行业的并购已经曝光:维易科(Veeco)签订了8.15亿美元收购优特(Ultrat ...

  3. 可调电阻封装图_元器件PCB封装图鉴(附PCB元件库)

    元器件封装的构建是PCB设计中的一个重要环节,小小的一个错误很可能导致整个板子都不能工作以及工期的严重延误.常规器件的封装库一般CAD工具都有自带,也可以从器件原厂的设计文档.参考设计源图中获取. 封 ...

  4. 封装绑定以BaseDataList , ListControl 为基类的函数库

    可以绑定Datagrid,DataList,DropDownList,RadioList,,,等控件.很想把DataGrid的很多操作都封装了,免得每次copy代码那么累 using System; ...

  5. python 函数调用列表_在项目列表上调用一个函数的最简洁方法 - python

    在python 2中,我使用map将函数应用于多个项目,例如,删除所有与模式匹配的项目: map(os.remove,glob.glob("*.pyc")) 当然我忽略了os.re ...

  6. python量化常用_简单介绍下量化分析的常用库TA-lib

    做python量化交易,尤其是做趋势跟踪的或者是K线指标分析跟踪的,TA-lib库基本都多多少少用到,搜索时候往往搜出来"塔利班",所以玩笑塔利班库.尤其对于从传统K线技术分析转计 ...

  7. python画气泡图_画气泡图的十二个图表库

    R – ggplot2Native R 可以来画图,但 ggplot2 才是乐趣的开始.我花了很多时间才弄懂它 – 特别是有许多方式来写ggplots2 命令.最终,我确定把一种灵活和操作简单的方法呈 ...

  8. 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?

    20190809上面答案没提到的,个人认为好用的 1.LittlevGL LittlevGL 是一个开源免费(MIT许可)的GUI,支持触摸屏操作,移植简单方便,开发者一直在不断完善更新.Little ...

  9. python 绘制花球_巧手匠心——手作课堂-中国大学mooc-题库零氪

    第一讲:剪纸基础及应用 剪纸基础知识 1.1.剪纸的表现形式,按剪刻的技巧分类,分为:阳刻.( ).阴阳刻相结合.剪影. A.折叠 B.掏剪 C.阴刻 D.破剪 2.2.剪纸按色彩表现形式分类,分为: ...

最新文章

  1. vue脚手架安装步骤vue-cli
  2. 因为喜欢,所以选择它
  3. js中select下拉框重置_如何利用CSS3制作炫酷的下拉框
  4. scrapy简单爬虫
  5. EasyUi模糊匹配搜索框combobox
  6. 苹果id被停用_三招解决Apple ID停用问题
  7. 腾创秒会达视频会议系统软件 安卓
  8. java 短连接转长连接_HTTP的长连接和短连接转换接口(API)
  9. 计算机组成原理中英文名词对照_持续更新
  10. mysql error 1114_ERROR 1114 (HY000): The table 'test1' is full 的解决
  11. 进程控制 父进程子进程 fork pid
  12. h5禁用浏览器下载视频_【HTML5】video 标签禁用自带的下载按钮
  13. 【内核笔记】博文2021回顾-2022规划
  14. java ca 验证失败,Apache CURL错误SSL:CA证书集,但禁用证书验证
  15. 请每一个恋爱中的人耐心地看下去
  16. 人脸识别之人脸对齐(一)--定义及作用
  17. 左程云:程序员该如何学习算法?
  18. 【网路编程】网络基础知识(IP、子网掩码、网关等)概念概述
  19. 百年奥运的相觑之温:尔疆我界,咫尺相见— 阿里云视频云「Cloud ME」
  20. long转换成日期、日期转换成long

热门文章

  1. [OS复习]程序装入技术、简单存储管理技术
  2. 一个词法分析器源码的剖析
  3. 关于.NET中的Server push技术
  4. STM32,CAN总线过滤器的设置详细讲解
  5. C语言模拟实现(一)----- 优先权抢占式时间片调度算法
  6. 汇编语言加法和减法详解
  7. CPU处理器架构和工作原理浅析
  8. 揭开知识库问答KB-QA的面纱3·信息抽取篇
  9. Android动态日志系统Holmes
  10. Android6.0的SMS(短信)源码分析--短信接收