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");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM