2010-07-10 75 views
0

C/C++可以使用python API來加載py。我如何將map <string,string>傳遞給py中的API?

但是,只支持簡單類型。

如何將地圖傳入py以成爲帶有API的字典?

或者,哪種方法更好?

+0

http://docs.python.org/extending/ – msw 2010-07-10 14:50:15

+0

從Boost.Python,使用map_indexing_suite(cppf文件:http://www.boost.org/doc/libs/1_43_0/libs/python/test /map_indexing_suite.cpp和python文件:http://www.boost.org/doc/libs/1_35_0/libs/python/test/map_indexing_suite.py) – rafak 2010-07-10 15:36:37

回答

0

Python的C API支持C級功能(未C++水平之一) - 基本上,可以很容易地露出到Python事情可以放在一個extern C塊(其不包括std::map & C) - 對其他的東西,你需要更多的工作。這項工作的性質取決於你用什麼來包裝你的C++代碼以用於Python消費 - 這裏有很多選項,包括裸C API,SWIG,SIP,Boost Python,Cython ......

In裸C API(我假設你正在使用的是從你的問題和標籤判斷),我會推薦making a custom object type - 也許,這些天,一個子類collections.MappingMutableMapping如果可變,當然),就像你會在Python中實現映射 - 並實現Mapping Object Structures加上通用type structure的所需位,例如tp_itertp_iternext插槽。

當然,關鍵的想法是,您將通過簡單地委託給您所選的std::map並執行所需的類型轉換和低級別擺弄(對象分配,引用計數)來實現項目設置和獲取以及迭代) - 後者是擴展Python的更高級框架讓你不必做的基本部分,但「包裝和委託」底層架構不會發生太大的變化。

相關問題