2011-06-19 45 views
2

收到我想打電話給Python中的C++函數,它有兩個Python字典,其鍵值列表作爲參數,如C++函數:如何兩個Python字典傳遞給由地圖

a = {'str1': [1, 2, 3], 'str2': [4, 5, 6]} 
b = {'str3': [7, 8, 9], 'str4': [10, 11, 12]} 
cppFunction(a, b) 

而在C++ ,函數調用兩個字典並將它們存儲在類型爲map<string, vector<int>>的兩個變量中。我怎樣才能做到這一點?我必須使用boost庫嗎?

感謝,

Qingkun

+1

你打算如何包裝你的C++函數?促進?痛飲? Shiboken? ..或者自己寫包裝?在我們回答這個問題之前,我們需要知道。如果您還不知道,請說明您問的是什麼包裝方法/庫最適合您的情況。 – Macke

+0

@Ignacio Vazquez-Abrams @Macke我想使用我的C++函數中的字符串索引的列表,就像做一些計算。我不知道哪種方式在運行速度方面最爲有效。因爲我對這些有點新鮮,如果你能介紹一種簡單而有效的方法,我會很感激。謝謝 – Qingkun

回答

3

據我所知有兩個部分你的問題:1。如何調用C++從Python函數?2應在C使用什麼數據結構++舉行計算的輸入?

1的答案是一個很長的故事。例如,參見this questionthis question。對於2.,對於給定的示例,我將使用map<string, vector<int>>,正如您所建議的那樣,在包裝類或multimap<string, int>中使用,因爲它的現有接口可能更容易使用,所以使用起來會更快。

更新:添加鏈接到另一個答案1.

+0

感謝您的回答。實際上,我知道如何從python調用C++函數,但我只知道使用值或單變量作爲參數,通過調用C++函數中的PyArg_ParseTuple()來獲取參數。但是,現在我想要列表作爲鍵值的字典作爲傳遞參數。我怎樣才能做到這一點?如果你能給我一些示例代碼會更好。 – Qingkun

1

如果你想Python的參數傳遞給一個C沒有直接的C/C++當量/ C++函數(即不是字符串或數字),你可以做的最好的方法就是將它們作爲通用Python對象的指針並將它們當作對象。

這意味着您的C++擴展代碼必須像Python解釋器那樣以通用的方式處理它們,這需要執行諸如查找它們的方法並調用它們來操作 - 如在檢索,設置或刪除 - 它們的內容(如果它們是容器對象的話),例如lists,dicts等。然後,您的擴展程序可以使用此信息來構建所需的特定C++ map<>模板類型。

開源PyCXX項目提供設施,使其更易於編寫一般的C++ Python擴展,以及爲處理DictList參數提供預先編寫的C++類。更好的是,您可以將它們視爲抽象SequenceMapping對象,這些對象將使您的擴展代碼能夠處理實現相同接口的其他Python類型。