2010-07-10 74 views
0

C/C++可以使用python API来加载py。我如何将map <string,string>传递给py中的API?

但是,只支持简单类型。

如何将地图传入py以成为带有API的字典?

或者,哪种方法更好?

+0

http://docs.python.org/extending/ – msw 2010-07-10 14:50:15

+0

从Boost.Python,使用map_indexing_suite(cppf文件:http://www.boost.org/doc/libs/1_43_0/libs/python/test /map_indexing_suite.cpp和python文件:http://www.boost.org/doc/libs/1_35_0/libs/python/test/map_indexing_suite.py) – rafak 2010-07-10 15:36:37

回答

0

Python的C API支持C级功能(未C++水平之一) - 基本上,可以很容易地露出到Python事情可以放在一个extern C块(其不包括std::map & C) - 对其他的东西,你需要更多的工作。这项工作的性质取决于你用什么来包装你的C++代码以用于Python消费 - 这里有很多选项,包括裸C API,SWIG,SIP,Boost Python,Cython ......

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

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

相关问题