C++ 我如何通过map<;字符串,字符串>;使用API进入py?
C/C++可以使用pythonapi加载py 但是,只支持简单类型 如何将map传递到py中,使其成为带有API的dictC++ 我如何通过map<;字符串,字符串>;使用API进入py?,c++,python,c,api,cpython,C++,Python,C,Api,Cpython,C/C++可以使用pythonapi加载py 但是,只支持简单类型 如何将map传递到py中,使其成为带有API的dict 或者,哪种方法更好?使用,它对各种STL类型都适用,例如,>P> Python C API支持C级功能(不是C++级)——基本上,您可以轻松地将Python暴露在一个代码中>“Extnc>/Cuth>块”(不包括代码> STD::MAP< /Cord>C)——对于其他的东西,您需要做更多的工作。这项工作的性质取决于您用什么来包装Python消费的C++代码——有很多选项,包
或者,哪种方法更好?使用,它对各种STL类型都适用,例如,>P> Python C API支持C级功能(不是C++级)——基本上,您可以轻松地将Python暴露在一个代码中>“Extnc>/Cuth>块”(不包括代码> STD::MAP< /Cord>C)——对于其他的东西,您需要做更多的工作。这项工作的性质取决于您用什么来包装Python消费的C++代码——有很多选项,包括裸露的C API、SWIG、SIP、Boost Python、Cython、……/P> 在bare C API中(从您的问题和标记判断,我假设您正在使用这个API),我会推荐——也许,现在,一个子类(
MutableMapping
if mutable,当然),正如您在Python中实现映射时所做的那样——以及实现加上通用代码所需的位,例如tp_iter
和tp_iternext
插槽
当然,关键的想法是,通过简单地将任务委托给所选的
std::map
,并执行所需的类型转换和低级处理(对象分配、引用计数),您将实现项目设置和获取以及迭代--从本质上说,后者是扩展Python的高级框架使您不必做的部分,但“包装和委派”的底层架构不会有太大的改变。来自Boost.Python,一个使用map_indexing_suite的示例(cppf文件:和Python文件:)