![](/img/trans.png)
[英]How can I either use arguments or constructor values in a python class
[英]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.