前言

学习中如果碰到问题,参考官网例子: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++混合编程详解相关推荐

  1. python公共键_Python利用公共键如何对字典列表进行排序详解

    前言 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排序和 ...

  2. 高中生必须学习python吗_想少走弯路的看过来 高中生如何学习编程详解

    为了适应科技的发展和未来能选择更好的专业,高中生除了学习计算机常识之外,学习编程也变得越来越重要. 因为高中生已经有了比较扎实的学科基础,而且对系统知识具有一定的总结能力.所以学习编程也不是一件非常困 ...

  3. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. [Python图像识别] 五十.Keras构建AlexNet和CNN实现自定义数据集分类详解

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  6. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解

    Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...

  7. python 文件读写with open模式r,r+ w,w+ a,a+区别详解

    python 文件读写with open模式r,r+ w,w+ a,a+区别详解 python中的 with open主要要来进行文件读写的操作 在 Python 中使用文件的关键函数是 open() ...

  8. python编程基础:python 实现GUI(图形用户界面)编程详解

    今天小编就为大家分享一篇python 实现GUI(图形用户界面)编程详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python支持多种图形界面的第三方库,包括: wxWidge ...

  9. awk命令详解_python学习之利用urllib和urllib2访问http的GET/POST详解

    前言 本文主要给大家介绍了关于python如何学习访问http的GET/POST的相关内容,使用urllib和urllib2,可以轻松实现对http的访问,下面话不多说了,来一起看看详细的介绍吧. 示 ...

最新文章

  1. python导入类有红线_python踩坑系列之导入包时下划红线及报错“No module named”问题...
  2. thinkphp5.1嵌套关联预载入的写法
  3. php排版word文档试卷,word选择题选项排版
  4. 电脑上显示没有其他服务器服务,电脑显示没有远程服务器地址
  5. 拼音输入法的数学原理
  6. topcoder SRM 625 DIV2 IncrementingSequence
  7. d3.js中的选择元素
  8. 女朋友当众甩了我一巴掌,我扑上去......
  9. android androidruntime java,java – Runtime.exec():在Android中重启?
  10. html语言的网页制作,HTML语言的网页制作技巧与方法
  11. python软件下载中文版-PyCharm中文版
  12. 《如何写好科研论文》章节答案(清华)学堂在线(2020秋最新网课答案)
  13. windows配置jdk环境变量、mysql环境变量、tomcat环境变量、maven环境变量、git环境变量、node环境变量
  14. EasyCamera--更简单更灵活的相机应用编写
  15. 高效记忆/形象记忆(09)英语单词记忆-拼音法
  16. 作为互联网+项目负责人的一些感悟
  17. 三星很陶醉:爷会成为智能手机之王
  18. Kali 2022.2 安装
  19. Postman是什么 怎么用
  20. 如何自己动手为家庭做一套安防监控系统

热门文章

  1. B4.Java web部分
  2. Java学习笔记2.5.1 循环结构 - 条件循环
  3. 《天天数学》连载40:二月九日
  4. Spring Boot基础学习笔记:可视化数据
  5. 初探Thymeleaf模板引擎
  6. 大数据学习笔记13:MR案例——显示每年最高温度
  7. 【codevs1026】逃跑的拉尔夫,广搜的胜利
  8. bzoj3198 [sdoi2013] spring 哈希挂表+容斥
  9. 每日小记2017.2.22
  10. JavaScript面试小知识