SWIG Python默认参数

4

假设有以下的C语言原型函数:

void my_function(POINTER *p);

如何使用SWIG生成Python包装器以实现以下功能:
调用my_function()时,将调用my_function(NULL); 调用my_function(None)时,将调用my_function(NULL); 调用my_function(my_pointer)时,将调用my_function(my_pointer);
1个回答

2
您想让SWIG为参数

生成一个默认的NULL。这可以通过以下两种方式之一实现,请注意,None会自动作为NULL指针传递。

1. 使用“default”类型映射(SWIG文档

在声明my_function之前,在您的接口文件中放置以下类型映射:

%typemap(default) POINTER *p {
  $1 = NULL;
}

2. 在函数声明中指定默认参数(SWIG文档

您可以在接口文件中显示以下函数声明:

void my_function(POINTER *p = NULL);

尽管这不是有效的C代码,但SWIG会知道该怎么做。您还可以在%include语句之后放置它,以覆盖C头文件中的函数声明。

这就是答案。为了完整起见,还有第三种方法:使用%pythoncode将额外的代码添加到接口的Python侧,而不是C++侧。 - Flexo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接