Python呼叫採用Boost Python封裝的c++(2)
上次我寫了利用Python提供的API封裝c函式,並呼叫。但是由於利用API的方式過於原始,對於類或者結構極度麻煩。因此,我選擇了Boost的Python的來封裝類,類似的工具還有SWIG等,選擇Boost的原因是它不需要引入其他的介面描述語言,封裝也是c++程式碼;另外,它支援的c++特性比較全。
下面貼一個例子,這個例子覆蓋的面很全,需要好好理解。這個例子,是研究怎麼封裝C++。下一節,我會寫一些高階的用法。
- #include <boost/python.hpp>
- #include <boost/python/module.hpp>
- #include <boost/python/def.hpp>
- #include <boost/python/to_python_converter.hpp>
- #include
- usingnamespace std;
- usingnamespace boost::python;
- namespace HelloPython{
- // 簡單函式
- charconst* sayHello(){
- return"Hello from boost::python";
- }
- // 簡單類
- class HelloClass{
- public:
- HelloClass(const string& name):name(name){
- }
- public:
- string sayHello(){
- return"Hello from HelloClass by : " + name;
- }
- private:
- string name;
- };
- // 接受該類的簡單函式
- string sayHelloClass(HelloClass& hello){
- return hello.sayHello() + " in function sayHelloClass";
- }
- //STL容器
- typedef vector<int> ivector;
- //有預設引數值的函式
- void showPerson(string name,
- cout << name << " " << age << " " << nationality << endl;
- }
- // 封裝帶有預設引數值的函式
- BOOST_PYTHON_FUNCTION_OVERLOADS(showPerson_overloads,showPerson,1,3) //1:最少引數個數,3最大引數個數
- // 封裝模組
- BOOST_PYTHON_MODULE(HelloPython){
- // 封裝簡單函式
- def("sayHello",sayHello);
- // 封裝簡單類,並定義__init__函式
- class_("HelloClass",init())
- .def("sayHello",&HelloClass::sayHello)//Add a regular member function
- ;
- def("sayHelloClass",sayHelloClass); // sayHelloClass can be made a member of module!!!
- // STL的簡單封裝方法
- class_("ivector")
- .def(vector_indexing_suite());
- class_ >("ivector_vector")
- .def(vector_indexing_suite >());
- // 帶有預設引數值的封裝方法
- def("showPerson",showPerson,showPerson_overloads());
- }
相關推薦
Python呼叫採用Boost Python封裝的c++(2)
上次我寫了利用Python提供的API封裝c函式,並呼叫。但是由於利用API的方式過於原始,對於類或者結構極度麻煩。因此,我選擇了Boost的Python的來封裝類,類似的工具還有SWIG等,
Python——內置函數(2)
pri 篩選 遍歷 真的 pytho 遍歷序列 最終 bsp red 1、map 遍歷序列,對序列中的每個元素進行操作,最終獲取新的序列li = [11,22,33] l1=[1,2] l2=[1,2] l3=[1,2] def func(arg): retu
python學習_day54_前端基礎之js(2)
data 截取 定義 得到 let 結果 是什麽 index 插入 在JavaScript中除了null和undefined以外其他的數據類型都被定義成了對象,也可以用創建對象的方法定義變量,String、Math、Array、Date、RegExp都是JavaScri
python之文件的讀寫(2)
import 文件讀寫 哈哈 進入 imp std 技術 都是 繼續 小R昨天因為在研究weblogic的漏洞就沒來得及學習python(好吧,這都是借口,懶了,大家可不能像我這樣。要堅持每天都學)。 這個進度是有點慢呀。哎呀,沒事沒事,我還年輕,才20歲。 哈哈,玩
Python的學習筆記DAY7---關於爬蟲(2)之Scrapy初探
首先是安裝,python3+windows10 64位。 安裝Scrapy,安裝,直接pip install Scrapy.....下載了半天報錯。。好像是沒有lxml這
Python菜鳥快樂遊戲程式設計_pygame(2)
Python菜鳥快樂遊戲程式設計_pygame(博主錄製,2K解析度,超高清) https://study.163.com/course/courseMain.htm?courseId=1006188025&share=2&shareId=400000000398149
Python語言資料結構和語言結構(2)
1. Python預備基礎 變數的命名 變數命名規則主要有以下幾條: 變數名只能包含字母、數字和下劃線,其中下劃線和字母可以開頭,數字不行,即info_1可以,而1_info不行; 變數名內不能包含空格,可以用下劃線替代,即info_1,而非info 1; 不能與Pyt
python中對閉包的理解(2)
上一篇介紹了閉包的概念,這一篇介紹下閉包的使用過程中需要注意的問題。 def count(): fs = [] for i in range(1,4): def f(): return i*i fs.append(f)
【Python web 開發】使用者註冊功能(2)
我們繼續來完善使用者的註冊功能 註冊的時候前端post過來 手機號,驗證碼,密碼,而密碼和驗證碼我們只需要在serialzers 裡面驗證用,不需要序列化返回給前端 正常的serialzers 是怎樣的邏輯呢? 我們來看下CreateModelMixin 的原始碼
Python資料分析與挖掘學習筆記(2)使用pandas進行資料匯入
一、匯入pandas模組: import pandas as pda 二、匯入CSV格式資料: #資料匯入 i=pda.read_csv("E:/hexun.csv") 可對匯入的資料進行統計以及按列排序: #統計 i.describe() #排序 i
【學習筆記】使用python批量讀取並修改xml檔案(2)
在大老闆的安排下最近在某公司實習,實習期間要求實現一個影象識別模組的封裝。無奈基礎太薄弱,只能將任務細分,單獨學習來實現。以此為背景…… 這一篇記錄一些在實際使用中踩到的坑。在實際使用中,我在A資料夾下對圖片進行了標註,隨後將圖片移動到B資料夾下。那麼相應的,標註後的xml檔案中,<p
python學習記錄之---------PYQT5做工具(2)下拉選項框的使用
工具/版本(1)安裝環境:Windows7 64bit(2)使用版本Python3.6(3)PYQT5(4)eric6-6.1.0基本的使用前文有介紹,直入正題初始形態選擇省份後,列出對應省份所有城市,都選擇後,點選開始,顯示在文字框中實現方法,首先將所有省份和對應城市放在對
Python基礎學:內建型別(2)
5.迭代器型別 Python支援對容器進行迭代的概念。他有兩種不同的實現方法,但都可以歸於使用使用者自定義的類實現迭代。接下來,將詳細解釋說明: 第一種方法需要定義容器物件以提供迭代基礎:container. __iter__()該方法返回一個迭代器物
OS_FLAG.C(2)
本篇介紹OS_FLAG.C檔案中的建立事件標誌組函式*OSFlagCreate (OS_FLAGS flags,INT8U *perr)和刪除事件標誌組函式 *OSFlagDel (OS_FLAG_GRP *pgrp,INT8U opt,INT8U *perr)。OS
Android okHttp封裝庫(2) -- okhttp-OkGo
OkGo - OkHttpUtils-2.0.0 升級後改名 OkGo,全新完美支援RxJava 該庫是封裝了okhttp的標準RESTful風格的網路框架,可以與RxJava完美結合,比Retrofit更簡單易用。支援大檔案上傳下載,上傳進度回撥,下載進度回撥
python與C++的相互呼叫(2)
上文簡單介紹了python,以及在C中進行python模組的匯入、函式、類介面的獲得等比較基本的操作。接下來我們考慮:當我們已經獲得了函式的介面之後,我們就應該能夠對他進行呼叫了,接下來我們就來說一說函式的引數和返回值的問題。上文已經說了在python的世界裡一切都是以P
新手學python(2):C語言呼叫完成資料庫操作
繼續介紹本人的python學習過程。本節介紹如何利用python呼叫c程式碼。內容還是基於音樂資訊提取的過程,架構如圖一。Python呼叫c實現的功能是利用python訪問c語言完成mysql資料庫操作。 在利用python呼叫c語言之前,我們需要首先完成c語言功能程式
python採用pika庫使用rabbitmq(一)
1 安裝: centos 執行yum install rabbitmq-server-3.5.2-1.noarch.rpm 進行安裝 ps:這裡不用 rpm -ivh rabbitmq-server-3.5.2-1.noarch.rpm進行安裝,而是用yum ins
python採用pika庫使用rabbitmq(四)訊息確認(Message acknowledgment)
從上篇文章可知,每個工作者,都會依次分配到任務。那麼如果一個工作者,在處理任務的時候掛掉,這個任務就沒有完成,應當交由其他工作者處理。所以應當有一種機制,當一個工作者完成任務時,會反饋訊息。 訊息確認就是當工作者完成任務後,會反饋給rabbitmq 修改receive.py的內容: 1 def c
python採用pika庫使用rabbitmq(八)有選擇的接收訊息(exchange type=direct)
RabbitMQ還支援根據關鍵字傳送,即:佇列繫結關鍵字,傳送者將資料根據關鍵字傳送到訊息exchange,exchange根據 關鍵字 判定應該將資料傳送至指定佇列。 1 import pika 2 import sys 3 4 connection = pika.B