其他分享
首页 > 其他分享> > c-Swig:如何包装double&(通过引用传递的double)?

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