使用pyste自动生成c++类的python wrapper-阿里云开发者社区

开发者社区> 最美的回忆> 正文

使用pyste自动生成c++类的python wrapper

简介:
+关注继续查看
pyste是boost.python自带的代码生成器,利用pyste可以很方便的为c++ 的 lib加一层python的shell。如果当前boost版本不支持pyste的话,可以到boost官方网站上下载最新版本的boost源码。以 boost 1.3.1为例,进入boost_1_33_1/libs/python/pyste/install目录,运行python setup.py install,安装pyste。

安装完pyste后还不能直接用,因为pyste依赖gccxml,所以需要安装gccxml。最好从源码make。直接安装二进制我没安装成功。如果 gcc环境是gcc4.*,需要从cvs下载最新的gccxml。gcc xml采用cmake控制,没cmake的最好安装cmake(从源码make,最好不要安装二进制的)。

pyste使用模式推荐如下:

写一个配置文件My.pyste,上面写好类的映射项,如
Class("A", "A.h")
代表将A.h中的c++类A的public成员映射为python中的类A的相关成员

python -I/usr/include/python2.4 -I...... --module=MyModule My.pyste

将会自动生成一个wrapper的cpp程序。编译链接这个程序及其依赖项为MyModule.so,就可以直接在python中使用类A了。

需要注意的是,如果A中某些public 方法参数或返回值是指针或引用,因为pyste不能判断其生命周期,因此不能正确的转换,会报错误。此时,需要对这个方法加上一些策略约束。

常用策略有:

# with_custodian_and_ward
Ties lifetimes of the arguments
# with_custodian_and_ward_postcall
Ties lifetimes of the arguments and results
# return_internal_reference
Ties lifetime of one argument to that of result
# return_value_policy<T> with T one of:
# reference_existing_object
naive (dangerous) approach
# copy_const_reference
Boost.Python v1 approach
# copy_non_const_reference
# manage_new_object
Adopt a pointer and hold the instance

具体的解释和使用方法见:
http://www.boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies

策略可以嵌套,如

policy1<args...,
    policy2<args...,
        policy3<args...> > >

以一个例子说明在pyste配置文件中如何使用方法的策略:

假定类B中有一个方法:
A* B::Method1()
{
    ......
}

A*是B管理的一个对象,其生命周期由B控制。

那么pyste策略应该写为:

CLASS_B = Class("B", "B.h")
set_policy(CLASS_B.Method1,return_value_policy(reference_existing_object))

注意,Boost.Python中的策略用模板格式< , <, <, ... >>>表示,在pyste中,用()格式表示:( , (, (, ... )))。

更详细的内容还是请看Boost.Python的文档及pyste的文档吧。
Boost.Python文档:
http://www.boost.org/libs/python/doc/tutorial/doc/html/index.html
pyste文档:

http://www.boost.org/libs/python/pyste/index.html

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2006/03/16/351258.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【转】android如何实现开机自动启动Service或app
1.今天我们主要来探讨android怎么让一个service开机自动启动功能的实现。Android手机在启动的过程中会触发一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤: 2. 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。
853 0
使用thrift做c++,java和python的相互调用
linux上安装thrift见 http://jinghong.iteye.com/blog/1102535 thrift做为跨语言调用的方案有高效,支持语言较多,成熟等优点;代码侵入较强是其弱点。
807 0
IIS与ApplicationPool重启检测自动化解决方案
IIS与ApplicationPool重启检测自动化解决方案 Friday, November 28, 2014 DA Hotfix Automatic IIS & Application Pool Check-Reset solution   1.右键tool,run as admin;需要联系我​:Tianyou.Lan 2.自动检测完成。
765 0
多进程监控自动关机工具升级远程关闭多台server——C# works with PowerShell
之前给单位做过一个多进程监控的自动关机工具,详见那篇blog。 这次领导又加了需求,说要等进程监控结束后,不止需要关闭主控端server,还需要关闭其他servers。于是就用到了我上篇文章所介绍的知识——通过PowerShell来远程管理计算机。
941 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
7060 0
让小程序在自有App中启动的技术来了:mPaaS小程序架构深度解析
mPaaS 小程序框架作为一款 App 通用框架,帮助开发者面向自身的 App 实现小程序投放。不止如此,小程序代码仅需撰写一次,便可多端投放至自有 App、支付宝、钉钉甚至其他小程序开放平台。
1597 0
使用setuptools自动安装python模块
setuptools绝对是个好东西,它可以自动的安装模块,只需要你提供给它一个模块名字就可以了,并且自动帮你解决模块的依赖问题。
632 0
bootstrap-datetimepicker 的使用
          在web开发中,难免会用到时间选择控件,也正好也在使用bootstrap,所以就找到了bootstrap-datetimepicker 这个插件,下面把这个插件的使用记录一下,以做备忘。
1401 0
2286
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载