C++ 嵌入、扩展Python的开发库 ffpython

问题描述

Python 是最流行的脚本之一,并且python拥有定义良好的C API接口,同时又有丰富的文档,与C++结合非常的适合。通常情况下使用C++封装机制,而用python脚本实现策略或者是控制。使用python和C++结合的技术拥有如下优势: • 主体系统使用C++实现,保持系统的高效。 • 控制部分使用python,增加开发效率,python的内存垃圾回收,丰富的类库都使C++开发者获益匪浅。 • Python脚本可以运行期重载,可以实现控制部分不停机热更新。 C++与python的编程范式有很大不同,当使用python C API调用python时,python中的一些特有机制会给C++开发者带来很多困惑。常常使用python C API时需要注意如下几点: • Python 使用引用计数**内存,调用python C API时对于返回值返回的是借用的引用还是新的引用,需要根据文档仔细确认。否则轻则出现内存泄露,重则程序崩溃。 • Python中的数据结构与C++的有很大不同。Python常用的有tuple,list,dict。而c++常用的事 vector,list,map,并且c++是强类型的。当c++与python进行交互时,C++层希望**作python数据结构就像**作c++ STL一样方便,而在python脚本层,又希望c++传入的参数或返回值都是原生的python数据 • C++中常用的指针传递对象,当嵌入python时,需要把c++对象传递到python中。ffpython是专门方便C++嵌入python开发的类库,基于ffpython一方面可以轻松的将python集成到C++系统,另一方面,C++对象或接口也可以很容易被python使用,总之ffpython简化了c++与python的交互**作。 **ffpython 是轻量级的,只有一个头文件,并且增加了一个方便阅读的版本,可以供想要嵌入python的开发者参考。**嵌入pythonint a1 = 100; float a2 = 3.14f; string a3 = "OhWell";ffpython.call("ff**", "**_base", a1, a2, a3);使用STLvector a1;a1.push_back(100);a1.push_back(200);list a2; a2.push_back("Oh");a2.push_back("Nice");vector > a3;a3.push_back(a2);ffpython.call("ff**", "**_stl", a1, a2, a3);异常用户可以catch标准异常,what接口返回的字符串包含了异常的traceback信息方便排查错误。示例如下:try{ ......}catch(exception& e){ printf("exception traceback %sn", e.what());}扩展pythonffpython 可以注册static函数到python中,全局的C风格的static函数和类中定义的static函数都可以被注册到python中,示例如下:static int print_val(int a1, float a2, const string& a3, const vector& a4){ printf("%sn", __FUNCTION__, a1, a2, a3.c_str(), a4.size()); return 0;}struct ops_t{ static list return_stl() { list ret;ret.push_back(1024); printf("%sn", __FUNCTION__); return ret; }};void **_reg_function(){ ffpython_t ffpython; ffpython.reg(&print_val, "print_val") .reg(&ops_t::return_stl, "return_stl"); ffpython.init("ext1"); ffpython.call("ff**", "**_reg_function");}c++类注册到pythoncl** foo_t{public: foo_t(int v_):m_value(v_) { printf("%sn", __FUNCTION__); } virtual ~foo_t() { printf("%sn", __FUNCTION__); } int get_value() const { return m_value; } void set_value(int v_) { m_value = v_; } void **_stl(map >& v_) { printf("%sn", __FUNCTION__); } int m_value;};cl** dumy_t: public foo_t{public: dumy_t(int v_):foo_t(v_) { printf("%sn", __FUNCTION__); } ~dumy_t() { printf("%sn", __FUNCTION__); } void dump() { printf("%sn", __FUNCTION__); }};static foo_t* obj_**(dumy_t* p){ printf("%sn", __FUNCTION__); return p;}void **_register_base_cl**(ffpython_t& ffpython){ ffpython.reg_cl**("foo_t") .reg(&foo_t::get_value, "get_value") .reg(&foo_t::set_value, "set_value") .reg(&foo_t::**_stl, "**_stl") .reg_property(&foo_t::m_value, "m_value"); ffpython.reg_cl**("dumy_t", "dumy_t cl** inherit foo_t ctor ", "foo_t") .reg(&dumy_t::dump, "dump"); ffpython.reg(obj_**, "obj_**"); ffpython.init(); ffpython.call("ff**", "**_register_base_cl**");};

解决方案

顶也~~~static/image/common/sigline.gif**货源、市场空白产品诚招代理http://user.qzone.qq.com/82175487
解决方案二:
帮你顶,人还是厚道点好static/image/common/sigline.gif90%打工小伙一生都不可能知道的秘密 http://67177.miyue999.com/

时间: 2024-09-28 04:39:44

C++ 嵌入、扩展Python的开发库 ffpython的相关文章

mprpc —— 高性能的 Python RPC 开发库

mprpc 详细介绍mprpc 是一个轻量级的 MessagePack RPC 远程方法调用库.你可以用它来轻松构建一个分布式的服务器端系统,只需要少量代码,基于 gevent 和 MessagePack 开发. 服务器端: from gevent.server import StreamServer from mprpc import RPCServer class SumServer(RPCServer): def sum(self, x, y): return x + y server =

sklearn:Python语言开发的通用机器学习库

引言:深入理解机器学习并完全看懂sklearn文档,需要较深厚的理论基础.但是,要将sklearn应用于实际的项目中,只需要对机器学习理论有一个基本的掌握,就可以直接调用其API来完成各种机器学习问题. 本文选自<全栈数据之门>,将向你介绍通过三个步骤来解决具体的机器学习问题. sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大量详尽的文档和示例.其

c/c++扩展python实例学习教程

用python脚本写应用比较方便,本文我们将学习用c/c++python扩展的实例. 说明: 测试环境中操作系统为CentOS6.5_x64,python版本为2.6 直接调用动态库 1.编写模块动态库文代码 这里以求最大数为示例 代码(callTest1.cpp)如下: extern "C"{    int Max(int i1,int i2)    {        return (i1>i2)?i1:i2;    }}   在bash中执行以下命令: g++ -fPIC -

《Python爬虫开发与项目实战》——第2章 Web前端基础 2.1 W3C标准

第2章 Web前端基础 爬虫主要是和网页打交道,了解Web前端的知识是非常重要的.Web前端的知识范围非常广泛,不可能面面俱到和深入讲解,本章主要是抽取Web前端中和爬虫相关的知识点进行讲解,帮助读者了解这些必备的知识,为之后的Python爬虫开发打下基础. 2.1 W3C标准 如果说你只知道Web前端的一个标准,估计肯定是W3C标准了.W3C,即万维网联盟,是Web技术领域最具权威和影响力的国际中立性技术标准机构.万维网联盟(W3C)标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组

是时候给AI减负了,Python五大AI库推荐

文章讲的是是时候给AI减负了,Python五大AI库推荐,机器学习是件令人兴奋的事,但一系列工作是复杂和困难的.作为一名开发人员,要学习的工具实在是太多太杂了.幸运的是,Python是一种广泛应用于大数据和机器学习各类工具上的语言,使用范围极广.机器学习通常涉及大量手动提升的工作,组装工作流和管道.设置数据源以及在内部和云部署的资源之间来回分流.以下这五大Python库可帮助加快数据管道,例如,使用AWS Lambda可对计算量较大的作业进行碎片处理,使用TensorFlow模型可减轻Tenso

Bokeh 0.12.6 正式版发布,Python 交互式可视化库

经过 7 个 开发测试版本和 5 个候选版本后,Bokeh 0.12.6 正式版终于发布了.该版本增加了一些重要功能并修复了几个 bug ,亮点包括: SVG 和 PNG 图像支持 Headless 和 programmatic 导出 用于显示错误估量的 annotations Band 和 Whisker 用于图像和其他"多"字形的 Fine-grained sub-element 悬停点击测试扩展到段和所有标记 修复 DataTables 的排序和选择 布局系统大面积清理和重构 改

十款最出色的PHP安全开发库中文详细介绍(1)

1. PHP入侵检测系统 开发库中文详细介绍(1)-webapp详细开发介绍"> PHP IDS(即PHP-入侵检测系统)是一套易于使用.结构良好.速度出色且专门面向PHP类Web应用程序的先进安全层.这套入侵检测系统既不提供任何缓和及杀毒机制,也不会对恶意输入内容进行过滤,其作用单纯为识别出攻击者们针对站点进行的恶意活动.并以大家需要的方式作出及时提醒.凭借着一整套经过实践检验及相当严格的过滤规则,该检测系统会针对任何攻击活动给出一个影响评级数值,从而帮助用户更轻松地了解应如何应对当前出

分享十款最出色的PHP安全开发库中文详细介绍

  1. PHP入侵检测系统 开发库中文详细介绍-芭提雅6996详细介绍"> PHP IDS(即PHP-入侵检测系统)是一套易于使用.结构良好.速度出色且专门面向PHP类Web应用程序的先进安全层.这套入侵检测系统既不提供任何缓和及杀毒机制,也不会对恶意输入内容进行过滤,其作用单纯为识别出攻击者们针对站点进行的恶意活动.并以大家需要的方式作出及时提醒.凭借着一整套经过实践检验及相当严格的过滤规则,该检测系统会针对任何攻击活动给出一个影响评级数值,从而帮助用户更轻松地了解应如何应对当前出现的

OpenGL开发库的介绍[转载]

开发基于 OpenGL 的应用程序,必须先了解 OpenGL 的库函数.它采用 C 语言风格,提供大量的函数来进行图形的处理和显示. OpenGL 库函数的命名方式非常有规律.所有 OpenGL 函数采用了以下格式:  < 库前缀 >< 根命令 >< 可选的参数个数 >< 可选的参数类型 >  库前缀有 gl . glu . aux . glut . wgl . glx . agl 等等,分别表示该函数属于 OpenGL 那个开发库,从函数名后面中还可以看出