c python boost.python_如何利用Boost.Python实现Python C/C++混合编程详解
前言
学习中如果碰到问题,参考官网例子:D:boost_1_61_0libspythontest
参考:Boost.Python 中英文文档。
利用Boost.Python实现Python C/C++混合编程
关于python与C++混合编程,事实上有两个部分
extending 所谓python 程序中调用c/c++代码, 其实是先处理c++代码, 预先生成的动态链接库, 如example.so, 而在python代码中import example;即可使用c/c++的函数 .
embedding c++代码中调用 python 代码.
两者都可以用 python c 转换api,解决,具体可以去python官方文档查阅,但是都比较繁琐.
对于1,extending,常用的方案是boost.python以及swig.
swig是一种胶水语言,粘合C++,PYTHON,我前面的图形显示二叉树的文章中提到的就是利用pyqt作界面,调用c++代码使用swig生成的.so动态库.
而boost.python则直接转换,可以利用py++自动生成需要的wrapper.关于这方面的内容的入门除了boost.python官网,中文的入门资料推荐
下面话不多说了,来一起看看详细的介绍吧
导出函数
#include
#include
using namespace std;
using namespace boost::python;
char const * greet()
{
return "hello,world";
}
BOOST_PYTHON_MODULE(hello_ext)
{
def("greet", greet);
}
python:
import hello_ext
print hello_ext.greet()
导出类:
导出默认构造的函数的类
c++
#include
#include
using namespace std;
using namespace boost::python;
struct World
{
void set(string msg) { this->msg = msg; }
string greet() { return msg; }
string msg;
};
BOOST_PYTHON_MODULE(hello) //导出的module 名字
{
class_("World")
.def("greet", &World::greet)
.def("set", &World::set);
}
python:
import hello
planet = hello.World() # 调用默认构造函数,产生类对象
planet.set("howdy") # 调用对象的方法
print planet.greet() # 调用对象的方法
构造函数的导出:
#include
#include
using namespace std;
using namespace boost::python;
struct World
{
World(string msg):msg(msg){} //增加构造函数
World(double a, double b):a(a),b(b) {} //另外一个构造函数
void set(string msg) { this->msg = msg; }
string greet() { return msg; }
double sum_s() { return a + b; }
string msg;
double a;
double b;
};
c python boost.python_如何利用Boost.Python实现Python C/C++混合编程详解相关推荐
- python公共键_Python利用公共键如何对字典列表进行排序详解
前言 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排序和 ...
- 高中生必须学习python吗_想少走弯路的看过来 高中生如何学习编程详解
为了适应科技的发展和未来能选择更好的专业,高中生除了学习计算机常识之外,学习编程也变得越来越重要. 因为高中生已经有了比较扎实的学科基础,而且对系统知识具有一定的总结能力.所以学习编程也不是一件非常困 ...
- [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- [Python图像识别] 五十.Keras构建AlexNet和CNN实现自定义数据集分类详解
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- python编程入门与案例详解-Pythony运维入门之Socket网络编程详解
Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...
- python 文件读写with open模式r,r+ w,w+ a,a+区别详解
python 文件读写with open模式r,r+ w,w+ a,a+区别详解 python中的 with open主要要来进行文件读写的操作 在 Python 中使用文件的关键函数是 open() ...
- python编程基础:python 实现GUI(图形用户界面)编程详解
今天小编就为大家分享一篇python 实现GUI(图形用户界面)编程详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python支持多种图形界面的第三方库,包括: wxWidge ...
- awk命令详解_python学习之利用urllib和urllib2访问http的GET/POST详解
前言 本文主要给大家介绍了关于python如何学习访问http的GET/POST的相关内容,使用urllib和urllib2,可以轻松实现对http的访问,下面话不多说了,来一起看看详细的介绍吧. 示 ...
最新文章
- 怎么用python画个电脑_python语言还是java如何用python画爱心
- Linux基础-6性能监控
- centos ntfs-3g 安装和使用
- StringWriter/PrintWriter在Java输出异常信息中的作用
- 视觉SLAM找工作面试问题集锦(转自网络)
- oauth 使用令牌_使用OAuth2令牌的安全REST服务
- 图文:详解数据库Oracle 11g的基本安装
- Ubuntu 安装 Android-Studio
- 95-30-017-Channel-NioServerSocketChannel
- java发送html附件_Java发送邮件(图片、附件、HTML)
- python操作之更新数据库中某个字段的数据
- Python 语言简介与入门(1)
- 计算机网络教学常用哪些软件,仿真软件在计算机网络教学中的应用
- Cadence PSpice 仿真3: 电容器充放电瞬态仿真图文教程
- 时间对于程序员的价值,以及如何高效地利用时间,同时划分下勤奋度的等级
- 注意力机制+注意力汇聚
- 大学生学习编程很难吗?怎么样才能学好编程?
- 如何将自己的网站上传至服务器并通过域名进行访问
- Excel技巧 - 办公提效
- css中@media写法在ie 、firefox、Opera、Chrome、Safari 浏览器中的支持
热门文章
- 这个网站不错,根据引用jar包路径查找原JAR包
- 怎样在CSDN的博客里面显示上传的图片,教你一招
- 微信小程序学习笔记02:微信小程序注册
- 【codevs1553】互斥的数,二分查找是个好东西
- element 搜索匹配_如何在Element-ui中实现一个远程搜索功能
- 【英语学习】【医学】Unit 05 The Digestive System
- 浏览器js 获取手机标识信息_手机软件多次要求获取手机信息,习惯性让其通过有安全隐患?...
- 新闻列表页flex_C端列表页如何设计?
- 计算机专业课程项目教学教学设计,高职旅游管理专业计算机课程项目化教学设计...
- Windows中导出电脑文件名或者文件结构的方法