如何使用API​​将map <string,string>传递给py?</string,string>

时间:2010-07-10 14:43:23

标签: c++ python c api cpython

C / C ++可以使用python API加载py。

但是,只支持简单类型。

如何将map传递给py作为API的dict?

或者,哪种方法更好?

2 个答案:

答案 0 :(得分:1)

使用SWIGsome ready-made templates用于各种STL类型。例如See this

答案 1 :(得分:0)

Python C API支持C级功能(不是C ++级别的一级) - 基本上,您可以轻松地向Python中公开可放在extern C块中的内容(不包括std::map }&amp; c) - 对于其他东西,你需要更多的工作。这项工作的性质取决于你用来包装C ++代码以供Python使用的东西 - 有很多选项,包括裸C API,SWIG,SIP,Boost Python,Cython,......

在裸C API(我假设你正在使用的,从你的问题和标签判断),我建议making a custom object type - 也许,这些天,一个子类collections.MappingMutableMapping如果是可变的,当然),就像在Python中实现映射一样 - 并实现Mapping Object Structures加上tp_iter等{{}}}所需的位和tp_iternext个插槽。

当然,关键的想法是,您只需委派给您选择的std::map并执行所需的类型转换和低级别的摆弄(对象分配),即可实现项目设置和获取以及迭代。 ,引用计数) - 后者是扩展Python的高级框架使您不必这样做的部分,本质上,但“包装和委托”底层架构不会发生太大变化。