如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?



假设我有一个C++类MyArray(void* data, width, height),我想用SWIG包装它到Python。现在我有一个将 numpy 数组映射到数据、宽度和高度的字体映射,我想保留一个 MyArray 对象而不复制,即使 numpy 数组超出范围。

如何覆盖/隐藏 MyArray 的构造函数,以存储对 numpy 数组的引用,以便 MyArray 保留 numpy 数组的引用计数?

抱歉,我的 Java 解决方案,但我相信转换为 Python 大小写没有问题。我的解决方案基于其他答案防止过早的垃圾收集。在这种方法中,引用存储在高级语言包装器中的对象(在您的例子中为 Python(。为此,您可以使用*.i文件中的下一个代码(Java-case的示例(:

%define SAVE_REF(container, variable)
%typemap(javacode) container %{
private Object ref_ ## variable;
%}
%typemap(javaconstruct) container {
ref_ ## variable = variable;
swigCPtr = $imcall;
swigCMemOwn = true;
}
%enddef

然后在*.i中的类型声明之前

SAVE_REF(my_awesome_container_t, element);
... type declaration ...

相关内容

最新更新