Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我如何通过map<;字符串,字符串>;使用API进入py?_C++_Python_C_Api_Cpython - Fatal编程技术网

C++ 我如何通过map<;字符串,字符串>;使用API进入py?

C++ 我如何通过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++代码——有很多选项,包

C/C++可以使用pythonapi加载py

但是,只支持简单类型

如何将map传递到py中,使其成为带有API的dict


或者,哪种方法更好?

使用,它对各种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文件:)