Python SWIG 数组

0 投票
1 回答
1088 浏览
提问于 2025-04-16 06:25

我正在用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可能也是一个不错的起点。

撰写回答