Python/C++

1. Pybind11

pybind11是一个轻量级的只包含头文件的库,用于接口转换,它主要是用来在已有的 C++代码的基础上做扩展,用于 Python 和 C++ 之间接口转换。

它的语法和目标非常像Boost.Python,但Boost.Python为了兼容现有的基本所有的C++编译器而变得非常复杂和庞大,而因此付出的代价是很多晦涩的模板技巧以及很多不必要的对旧版编译器的支持。

Pybind11摒弃了这些支持,它只支持python2.7以上以及C++ 11及以上的编译器,使得它比Boost.Python更加简洁高效。

Requirement: C++11标准编译器,python2.7以上版本,CMake(跨平台、开源平台)

Support: 已经实现了 STL 数据结构、智能指针、类、函数重载、实例方法等到Python的转换,其中函数可以接收和返回自定义数据类型的值、指针或引用。

 

1.0 pybind安装

(a)从 pybind11 github网址:https://github.com/pybind/pybind11 上下载源码。

(b)CMake工程之前,要先安装pytest pip install pytest,否则会出错。

(c)用CMake编译并运行测试用例:

        Python/C++

如果所有测试用例都通过了,说明安装成功了。

 

 

1.1 python调用C++

(a)首先,我们编写一个C++源文件,命名为example.cpp

           Python/C++

 

 

 

 PYBIND11_MODULE()宏函数将会创建一个函数,在由Python发起import语句时该函数将会被调用。模块名字“example”,由宏的第一个参数指定(千万不能出现引号)。第二个参数"m",定义了一个py::module的变量。函数py::module::def()生成绑定代码,将add()函数暴露给Python。

(b) 使用CMake进行编译。首先写一个CMakeLists.txt。

          Python/C++

 

 

 就是CMakeList.txt和example.cpp放在一个目录下面。然后cmake .,可生成example.cpython-36m-x86_64-linux-gnu.so文件。这个文件就是python可以调用的文件。

在相同目录下运行python,进入python命令行,即可执行。 

           Python/C++

 

 

 

 

1.2 STL与python内建数组的对应关系

在使用python编程时,常使用内建容器作为函数的参数和返回值,python语言的这种特性使我们的程序变得非常灵活和易于理解。

在使用pybind11封装C++ api时,为了保留此灵活度,需要将STL与python的容器进行对应,具体对应如下所示:

                Python/C++

 

 

 

 

 

 

 

1.3 C++调用python

 

C++ code,此处import了tttt文件:

            Python/C++

 

  

python脚本(tttt.py):

           Python/C++

 

 

 

 

 


————————————————
版权声明:本文为CSDN博主「fitzzhang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fitzzhang/article/details/78988682

Python/C++

上一篇:linux内核数据结构之链表


下一篇:Shell脚本+py脚本 实现IP离线数量统计