作家
登录

打通Python和C++之后?你懂的!

作者: 来源: 2017-11-07 13:58:19 阅读 我要评论

Python作为世界上最好的 胶水 说话(哼,世界上最好的说话当然是PHP==),应用Python的简洁和C++的高效,根本可以解决99%的问题了吧~

一般的,Python和C++的交互分为这两种情况:

  1. 用C++扩大Python:当一个Python项目中出现了机能瓶颈时,将瓶颈部分抽离出来,用C++封装成一个Python可声调用的模块(so库);
  2. 将Python内嵌入C++:当一个C++项目中有部分功能预期将会经常变革需求,期望获得更高的灵活性时,将这部分功能用Python实现,在C++中进行调用。这篇文┞仿将简单介绍下第一部分的一种做法。

Boost作为一个大年夜宝库,供给了我们所须要的┞封一功能。并且,在Boost典范多库中,已经默认应用了Boost.Python,所以也算是经由了充分的测试。

打通Python和C++

Boost.Python

安装

Boost的大年夜部分功能都是以头文件的情势供给的,无需安装;然则也有少部分功能,须要进论述动编译。不幸,Boost.Python也是个中之一。

参照 Getting Started>

  • #include <boost/python.hpp> 
  •  
  • char const* greet() 
  •     return "hello, boost"
  •  
  • BOOST_PYTHON_MODULE(hello_boostpy) 
  •     using namespace boost::python; 
  •     def("greet", greet); 
  • 太简单了,代码根本说清楚明了一切~

    将其编译成动态链接库的情势:

    1. 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库了:


    1. # -*- coding: utf-8 -*- 
    2. import sys 
    3. sys.path.append('.'
    4.  
    5.  
    6. def test(): 
    7.     import hello_boostpy 
    8.     return hello_boostpy.greet() 
    9.  
    10.  
    11. if __name__ == "__main__"
    12.     print test() 

    Expose Class

    接下来,我们在C++实现的模块中,添加一个类,并且测验测验向C++偏向传入Python的list类型对象。

    C++类:

    ++

    1. #include <boost/python.hpp> 
    2. #include <vector> 
    3. #include <string> 
    4. #include <sstream> 
    5. using namespace boost::python; 
    6.  
    7. struct Person 
    8.     void set_name(std::string name) { this->name = name; } 
    9.     std::string print_info(); 
    10.     void set_items(list& prices, list& discounts); 
    11.      
    12.      
    13.     std::string name
    14.     std::vector<double> item_prices; 

        推荐阅读

        不止是数据迁移,这份 iPhone 换机指南连怎么处理旧手机都帮你想好了

      若何大年夜旧手机无痛迁徙到新机?若何处理旧手机?卖旧机如何防止隐私泄漏?三步走,备份 - 迁徙 - 处理一条龙,信赖这篇全方位的指南可以或许让你有的放矢。本年的苹不雅异常大方,信赖大年夜家都抢到 iPhone X 了 :)>>>详细阅读


      本文标题:打通Python和C++之后?你懂的!

      地址:http://www.17bianji.com/lsqh/38564.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)