python - 如何使用 swig 修改类构造函数以保持对构造函数参数之一的引用?
问题描述
假设我有一个 C++ 类MyArray(void* data, width, height)
,我想用 SWIG 将它包装到 Python。现在我有一个类型映射,它将一个 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 ...
推荐阅读
- spring - 如何以功能方式在@RefreshScope 中注册spring bean?
- wpf - 如何改变文本块的高度
- mysql - mysql - my.ini server-id 变量不会改变
- java - SpringBoot 2 无法在 tomcat 9 和 8.5 上运行
- javascript - 指南针航向 - 多次旋转
- javascript - Javascript - 以数字计算字符串数组的长度
- ios - 在 CoreData 模型中存储(long long)
- python - 在while循环条件中分配给函数返回值并沿途捕获异常
- sas - 在 SAS 中使用 Compress and Scan 创建新变量
- php - 如何从 Symfony 4.1 的包中获取自定义配置 yaml 文件?