• Boost.Python简介


    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");
    
  • 相关阅读:
    洛谷 P5162 WD与积木 解题报告
    Problem B: 专家系统 解题报告
    HWND、HANDLE、HMODULE、HINSTANCE的区别
    ubuntu找不到ifconfig
    ubuntu找不到ifconfig
    python中安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))…………
    python中安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))…………
    operator new 与 placement new之音的微妙关系
    operator new 与 placement new之音的微妙关系
    pycharm 使用记录
  • 原文地址:https://www.cnblogs.com/zjutzz/p/6160889.html
Copyright © 2020-2023  润新知