C/C++ 可以使用 python API 来加载 py。
但是,仅支持简单类型。
如何将 map 传递给 py 以成为带有 API 的字典?
或者,哪种方法更好?
Python C API 支持 C 级功能(不是 C++ 一级)——基本上,您可以轻松地向 Python 公开可以放入extern C
块中的东西(不包括std::map
&c)——对于其他东西,您需要一点更多的工作。这项工作的性质取决于你使用什么来包装你的 C++ 代码以供 Python 使用——有很多选择,包括裸 C API、SWIG、SIP、Boost Python、Cython……
在裸 C API 中(我假设这是你正在使用的,从你的问题和标签来看),我建议制作一个自定义对象类型——也许,这些天,一个子类化collections.Mapping(MutableMapping
如果是可变的,当然),就像在 Python 中实现映射时一样——实现映射对象结构以及通用类型结构所需的位,例如tp_iter
和tp_iternext
槽。
std::map
当然,关键思想是您将通过简单地委托给您选择并执行所需的类型转换和低级摆弄(对象分配、引用计数)来实现项目设置和获取以及迭代- 后者是用于扩展 Python 的高级框架使您不必做的部分,本质上,但“包装和委托”底层架构不会有太大变化。