Python作为世界上最好的 胶水 说话(哼,世界上最好的说话当然是PHP==),应用Python的简洁和C++的高效,根本可以解决99%的问题了吧~
一般的,Python和C++的交互分为这两种情况:
- 用C++扩大Python:当一个Python项目中出现了机能瓶颈时,将瓶颈部分抽离出来,用C++封装成一个Python可声调用的模块(so库);
- 将Python内嵌入C++:当一个C++项目中有部分功能预期将会经常变革需求,期望获得更高的灵活性时,将这部分功能用Python实现,在C++中进行调用。这篇文┞仿将简单介绍下第一部分的一种做法。
Boost作为一个大年夜宝库,供给了我们所须要的┞封一功能。并且,在Boost典范多库中,已经默认应用了Boost.Python,所以也算是经由了充分的测试。

Boost.Python
安装
Boost的大年夜部分功能都是以头文件的情势供给的,无需安装;然则也有少部分功能,须要进论述动编译。不幸,Boost.Python也是个中之一。
参照 Getting Started>
太简单了,代码根本说清楚明了一切~
将其编译成动态链接库的情势:
- g++ -I /usr/include/python2.7/ -fPIC -shared -o hello_boostpy.so hello_boostpy.cc -lboost_python
这时可以应用ldd看看hello_boostpy.so可弗成以找到libboost_python,找不到的话,须要手动将其路径参加情况变量LD_LIBRARY_PATH中,或者用ldconfig相干的敕令也可以。
接下来就可以在Python中应用hello_boostpy库了:
- # -*- coding: utf-8 -*-
- import sys
- sys.path.append('.')
- def test():
- import hello_boostpy
- return hello_boostpy.greet()
- if __name__ == "__main__":
- print test()
Expose Class
接下来,我们在C++实现的模块中,添加一个类,并且测验测验向C++偏向传入Python的list类型对象。
C++类:
++
- #include <boost/python.hpp>
- #include <vector>
- #include <string>
- #include <sstream>
- using namespace boost::python;
- struct Person
- {
- void set_name(std::string name) { this->name = name; }
- std::string print_info();
- void set_items(list& prices, list& discounts);
- std::string name;
- std::vector<double> item_prices;
推荐阅读
不止是数据迁移,这份 iPhone 换机指南连怎么处理旧手机都帮你想好了
若何大年夜旧手机无痛迁徙到新机?若何处理旧手机?卖旧机如何防止隐私泄漏?三步走,备份 - 迁徙 - 处理一条龙,信赖这篇全方位的指南可以或许让你有的放矢。本年的苹不雅异常大方,信赖大年夜家都抢到 iPhone X 了 :)>>>详细阅读
本文标题:打通Python和C++之后?你懂的!
地址:http://www.17bianji.com/lsqh/38564.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示