gpt4 book ai didi

python - 在 SWIG 中,如何在没有 typemaps.i 的情况下使用 int * 变量

转载 作者:行者123 更新时间:2023-11-30 15:44:20 26 4
gpt4 key购买 nike

我有一个程序,其中的 C 函数有点像下面的代码。当我尝试通过 python 调用这个函数时,它抛出错误,说

参数 2 类型为“int *”。在 swig 中,我看到有一种方法可以通过类型映射来处理这个问题,还有其他类型映射吗?因为有很多带有许多参数的函数具有 int * 。

#include<stdio.h>

int check(int k, int *i) {
if( k%2 == 0)
*i = 1;
else
*i = 0;
}

最佳答案

类型映射实际上是 SWIG 处理所有类型的方式,但如果您不想专门使用 typemaps.i ,那么可以:

%module x

%include <cpointer.i>
%pointer_functions(int,int)

%inline %{

void check(int k, int *i) {
if (k % 2 == 0)
*i = 1;
else
*i = 0;
}

%}

cpointer.i 允许您创建指向类型的简单指针。这是一个使用示例:

>>> import x
>>> i=x.new_int()
>>> x.check(6,i)
>>> x.int_value(i)
1
>>> x.delete_int(i)

但实际上,使用 typemaps.i 更简单。下面的 %apply 应用预定义的 OUTPUT 类型映射,声明所有 future 的 int * 参数都是输出参数。 Python 不需要调用参数,而是将参数作为输出返回。如果需要,正常返回值和所有输出参数都会使用元组返回。

%module x

%include <typemaps.i>
%apply int *OUTPUT { int * };

%inline %{

void check(int k, int *i) {
if (k % 2 == 0)
*i = 1;
else
*i = 0;
}

%}

使用示例:

>>> import x
>>> x.check(5)
0
>>> x.check(6)
1

关于python - 在 SWIG 中,如何在没有 typemaps.i 的情况下使用 int * 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19541070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com