介绍
这篇文章将为大家详细讲解有关使用用pybind11封装c++实现函数库的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
现有若干用c++编写的函数,为了能够用Python调用它们,可以通过pybind11将它们封装到一个Python模块中,在编写Python程序时只要导入该模块便能使用这些函数。
<强>一。实现步骤强>
- <李>
用c++函数实现函数功能,
李> <李>编写头文件,将函数的声明包含在头文件中,
李> <李>编写pybind11封装函数;
李> <李>用Python编写设置脚本;
李> <李>生成动态链接库pyd文件;
李> <李>测试函数功能。
李>
<强>二。代码实现强>
1。用c++函数实现函数功能
//文件名:add.cpp extern “C", double 添加(double ,三机一体,double in2), {, ,return in1  +, in2;, }
//文件名:sub.cpp extern “C", double 子(double ,三机一体,double in2), {, ,return in1 安康;in2, }
//文件名:mul.cpp extern “C", double mul (double ,三机一体,double in2), {, ,return in1 *, in2;, }
//文件名:div.cpp extern “C", double div1 (double ,三机一体,double in2), {, ,return in1 /, in2;, }
2。编写头文件,将函数的声明包含在头文件中
//文件名:functions.h # ifndef FUNCTIONS_H # define FUNCTIONS_H , # include & lt; iostream>, , using namespace 性病, , extern “C", double 添加(双,,双),, extern “C", double 子(双,,双),, extern “C", double mul(双,,双),, extern “C", double div1(双,,双),, , # endif
3。编写pybind11封装函数
//文件名:functions_wrapper.cpp # include & lt; pybind11/pybind11.h>, # include “functions.h", , namespace py =时间pybind11;大敌;; , PYBIND11_MODULE(功能,,米){, ,m.doc (),=,“Simple Class",, ,加(“add",,,添加),, ,加(“sub",,,子),, ,加(“mul",,, mul),, ,加(“div",,, div1),, }
4。用Python编写设置脚本
#文件名:setup . py 时间设置,得到setuptools import Extension ,=,扩展(functions_module =,name & # 39;功能# 39;,,=,sources [& # 39; add.cpp& # 39;,, & # 39; sub.cpp& # 39;,, & # 39; mul.cpp& # 39;,, & # 39; div.cpp& # 39;,, & # 39; functions_wrapper.cpp& # 39;),, ,include_dirs =, (" # 39; D: \ pybind11-master \ \软件包括# 39;,, ,,,," # 39;D: \蟒蛇\ \软件包括# 39;], ), , 设置(ext_modules =, [functions_module])
5。生成动态链接库pyd文件
在命令行执行<代码> python设置。py build_ext——原地> 代码,在当前路径下生成pyd动态库。
6。测试函数功能
#文件名:test.py import functions , 打印(functions.add (0.9, 3)), 打印(functions.sub (0.9, 3)), 打印(functions.mul (0.9, 3)), 打印(functions.div (0.9, 3))
输出:
引用>
3.9 -2.1 0.3 2.7
使用用pybind11封装c++实现函数库的案例