Boost.Python简单概括:是Boost库的一部分;用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针。

以下内容搬运自:https://wiki.python.org/moin/boost.python/GettingStarted

简介

BoostPython库让C++和Python几乎无缝结合,是Boost库的一个功能。

用BoostPython库,能快速、容易地将C++输出到Python,使得Python接口和C++接口非常像。它被设计成尽可能贴近你的C++设计。大多数情况下,你不需要修改C++类就能在Boost.Python中使用它。系统会简单地映射你的C++类和函数到Python。Boost.Python的这种绑定,是纯C++实现的,除了编辑器和编译器你什么别的都不需要。

Python C++-sig 维护了本库用户邮件列表。当前版本文档在这里开发文档 可以查到,往往是最新的。

Boost.Python和Python C API的关系

Python已经提供了API,用于粘合Python和C。那Boost::Python又是什么?Boost::Python是Python/C API的一个封装(wrapper)。

使用Python/C API,你需要在Python和C代码之间传递指针的前后,手动处理指针问题,比如指针不再指向原来的对象时,Boost::Python接管了这项任务,自动处理。此外,Boost::Python使我们能用C++的OOP方式,在Python对象上写操作。

比如,对于Python代码y=object_x[i],同样的功能用Python/C API实现,需要这样写:

y=PySequence_GetItem(object_x, i);

作为对比,用Boost::Python这样写就行了:

y=object_x[i];

此外,Boost::Python使得将我们的C++类输出为Python变得容易,甚至都不需要改变。Boost::Python的设计理念是:用户永远不需要接触PyObject*

如果你需要潜在Python/C API

用了Boost:Python后仍然可以用Python/C API写东西。甚至都不必引入python.h头文件,就可以用相关的函数了。比如在C++中清除掉一个Python错误,可以在一个Boost::Python程序中插入这行:

PyErr_Clear();

在C++中,Python/C API用PyObject指针来表示Python对象。而在Boost::Python中,这些用boost::python::object类的实例来封装(替代了直接用指针的表示)。

你如果需要某个boost::python::object的PyObject,可以通过boost::python::object的ptr()方法来获取到,它返回的是一个PyObject*。然后你可以使用Python/C API调用。比如,我有个boost::python:object的实例叫boostObj,我想知道它是否有一个叫做myAttributeName的属性,那就:

PyObject_HasAttrString(boostObj.ptr(), "myAttributeName");

Boost.Python简介的更多相关文章

  1. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  2. 64位win7下安装Boost 1.59.0 + boost.python 1.59.0 + gccxml + pygccxml + pyplusplus(py++)

    由于安装过程中实在是出现了N多问题,所以不得不专门写个帖子来记录一下这破东西在Win7下的安装过程,避免以后还要再用的时候踩坑. 1.Boost简介 Boost库是一个可移植.提供源代码的C++库,作 ...

  3. boost.python入门教程 ----python 嵌入c++

    Python语言简介 Python是一种脚本语言.以开放的开发接口和独特的语法著称.尽管Python在国内引起注意只有几年的时间,但实际上Python出现于上世纪90年代(据www.python.or ...

  4. Python学习(二)Python 简介

    Python 简介 官方指南及文档 Python2.7官方指南(中文版):http://pan.baidu.com/s/1dDm18xr Python3.4官方指南(中文版):http://pan.b ...

  5. 使用boost.python进行混合开发

    使用boost.python进行混合开发 原文请参照官网和各方参考,本文有改动! 参考链接:http://blog.csdn.net/lanbing510/article/details/121979 ...

  6. 【转】Boost.Python

    http://edyfox.codecarver.org/html/boost_python.html Boost.Python 是 Boost 中的一个组件,使用它能够大大简化用 C++ 为 Pyt ...

  7. Python学习--Python简介

    Python 简介 Python是一种解释型.编译性.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. P ...

  8. 3. Python 简介

    3. Python 简介 下面的例子中,输入和输出分别由大于号和句号提示符 ( >>> 和 ... ) 标注:如果想重现这些例子,就要在解释器的提示符后,输入 (提示符后面的) 那些 ...

  9. Python之路【第一篇】:Python简介和入门

    python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...

随机推荐

  1. layer.js中layer.tips

    <script src="~/Content/js/layer/layer.js"></script> layer.tips('名称不能为空', '#pro ...

  2. Android 底部弹出Dialog(横向满屏)

    项目中经常需要底部弹出框,这里我整理一下其中我用的比较顺手的一个方式(底部弹出一个横向满屏的dialog). 效果图如下所示(只显示关键部分): 步骤如下所示: 1.定义一个dialog的布局(lay ...

  3. Thread Object wait() notify()基本

    package com.thread.test.thread; import java.util.ArrayDeque; import java.util.Queue; import java.uti ...

  4. android android BitmapFactory报错OOM

    解决方法:listview中尽量不要使用ImageView作为item的组件 换成view并设background

  5. idea缓存

    昨天idea出现了一个奇怪的问题: 项目没有按我指定的配置运行,按cmd+:可以看输出.而是运行了配置包下的test环境的配置, 先一看,test环境被初始化为资源包并且在输出目录上, 先取消(fil ...

  6. Linux shell redirect

    Learn much from here Learn much from here

  7. Boolean()值为false的五个特殊值

    在if.while等需要判断条件时,会调用函数Boolean()对判断条件进行隐式转换,而只有五个特殊值才会返回false 这五个值是:undefined, null, "", 0 ...

  8. [LeetCode] Reverse String 翻转字符串

    Write a function that takes a string as input and returns the string reversed. Example: Given s = &q ...

  9. [LeetCode] Increasing Triplet Subsequence 递增的三元子序列

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

  10. [LeetCode] 3Sum Smaller 三数之和较小值

    Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 < ...