Python SWIG 数组
我正在用SWIG把一个C模块包装成Python模块。请问有没有办法把所有成员类型相同的Python列表或元组(也就是里面的元素都是同一种SWIG对象)转换成C语言的数组呢?
1 个回答
2
类型映射。你可能最想要的是一个“输入”类型映射,它的作用是把Python的类型转换成C语言的类型。声明的样子大概是这样的:
%typemap(in) { /* C代码,用于将Python的元组对象转换为C数组 */ }
在这个类型映射的代码里,你可以用变量$input来引用需要转换的PyObject*,然后把转换后的C数组赋值给$1。
http://docs.python.org/c-api/上有关于Python/C API的信息,你需要这些信息来拆解元组,获取里面的元素并把它们转换成C类型。
http://www.swig.org/Doc1.3/Typemaps.html提供了SWIG的类型映射文档。
文档一开始可能会让人觉得难以理解,所以可以看看/share目录下的一些示例类型映射。那个目录里的carrays.i可能也是一个不错的起点。