使用用pybind11封装c++实现函数库的案例

  介绍

这篇文章将为大家详细讲解有关使用用pybind11封装c++实现函数库的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

<强>一。实现步骤

<李>

用c++函数实现函数功能,

<李>

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

<李>

编写pybind11封装函数;

<李>

用Python编写设置脚本;

<李>

生成动态链接库pyd文件;

<李>

测试函数功能。

使用用pybind11封装c++实现函数库的案例

<强>二。代码实现

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——原地>

使用用pybind11封装c++实现函数库的案例

使用用pybind11封装c++实现函数库的案例

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++实现函数库的案例