C / C ++可以使用python API加载py。
但是,只支持简单类型。
如何将map传递给py作为API的dict?
或者,哪种方法更好?
答案 0 :(得分:1)
使用SWIG,some ready-made templates用于各种STL类型。例如See this。
答案 1 :(得分:0)
Python C API支持C级功能(不是C ++级别的一级) - 基本上,您可以轻松地向Python中公开可放在extern C
块中的内容(不包括std::map
}& c) - 对于其他东西,你需要更多的工作。这项工作的性质取决于你用来包装C ++代码以供Python使用的东西 - 有很多选项,包括裸C API,SWIG,SIP,Boost Python,Cython,......
在裸C API(我假设你正在使用的,从你的问题和标签判断),我建议making a custom object type - 也许,这些天,一个子类collections.Mapping( MutableMapping
如果是可变的,当然),就像在Python中实现映射一样 - 并实现Mapping Object Structures加上tp_iter
等{{}}}所需的位和tp_iternext
个插槽。
当然,关键的想法是,您只需委派给您选择的std::map
并执行所需的类型转换和低级别的摆弄(对象分配),即可实现项目设置和获取以及迭代。 ,引用计数) - 后者是扩展Python的高级框架使您不必这样做的部分,本质上,但“包装和委托”底层架构不会发生太大变化。