Python SWIG 数组
我正在使用 Python 的 SWIG 包装 C 模块。有没有办法将所有成员均为相同类型(相同类型的 Swig 对象)的 Python 列表/元组转换为 C 数组?
I am wrapping a C module with SWIG for Python. Is there any way to turn all Python lists/tuples whose members are all of the same type (same kind of Swig object) to C arrays?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
类型映射。您最有可能寻找的是“in”类型映射,它将 Python 类型映射到 C 类型。声明看起来像这样:
%typemap(in) {
/* 将 Python 元组对象转换为 C 数组的 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 中的一些示例类型映射。该目录中的 crays.i 也可以作为一个很好的起点。
Typemaps. What you are most likely looking for is an "in" typemap, which maps Python types to C types. The declaration looks something like this:
%typemap(in) {
/* C code to convert Python tuple object to C array */
}
Inside the typemap code you can use the variable $input to reference the PyObject* to convert, and assign your converted C array to $1.
http://docs.python.org/c-api/ has information on the Python/C API, which you'll need to unpack the tuple to get the items and convert them to C.
http://www.swig.org/Doc1.3/Typemaps.html has the SWIG documentation for typemaps.
The documentation can be hard to understand at first, so take a look at some example typemaps in /share. carrays.i in that directory might also serve as a good starting point.