c-Swig:如何包装double&(通过引用传递的double)?
作者:互联网
我正在使用SWIG从Python访问C代码.我如何优雅地包装一个函数,该函数在通过引用传递的变量中返回值,例如
void set(double&a) {
a = 42.;
}
我不知道该怎么做.在最佳情况下,我将能够在Python中使用带有Python浮点数的函数:
>>> b = 2.
>>> set(b)
>>> print b
42.0
目前,它给我一个TypeError:方法’TestDouble_set’中类型’double&’的参数2.
解决方法:
这样做:
您的swig接口文件:
%include <typemaps.i>
%apply double& INOUT { double& a };
void set(double& a);
在python脚本中的用法:
a = 0.0
a = set(a)
print a
如果您的函数返回了某些内容(而不是一个空值),请在python中执行以下操作
ret, a = set(a)
在swig中查看有关typemap的文档.您可以执行INPUT,OUTPUT& INOUT用于参数.高温超导
请注意,此解决方案依赖于SWIG提供的OUTPUT类型映射defined in typemaps.i
library,它预定义了typemaps being used by the %apply
command above.
typemaps.i为C基本类型定义输入/输出类型映射(有关更多信息,请参见上面的SWIG文档链接);但是,您必须在接口文件中包含typemaps.i库,SWIG才能使用它们. (因此,为什么一些评论者可能会发现原始解决方案不适用于他们.)
标签:pass-by-reference,double,swig,python,c-4 来源: https://codeday.me/bug/20191105/1998489.html