繁体   English   中英

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

[英]How to use swig to modify class constructor to keep a reference to one of the constructor arguments?

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

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

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

%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 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM