如何仅为SWIG指定函数(含类方法)应用out typemap,适配Python场景
SWIG 限定typemap作用于指定类方法的配置方案
结论
可以直接通过类名+函数名限定out typemap的作用范围,不需要依赖参数列表匹配,也不会影响其他同返回类型的函数。
具体配置方法
针对你提供的类A的场景,你的SWIG接口文件(.i)按如下方式编写即可:
%module demo %{ // 这里引入你类定义的头文件 #include "A.h" %} // 仅为A类的getBinaryData方法配置专属out typemap %typemap(out) const char* A::getBinaryData { // 取函数第二个入参length作为二进制数据长度,生成Python bytes对象 $result = PyBytes_FromStringAndSize($1, (Py_ssize_t)$input2); // 释放函数内部new申请的堆内存,避免泄漏 delete[] $1; } // 导入类定义,其余const char*返回的方法会走默认字符串转换逻辑 %include "A.h"
补充说明
- 如果你的类下存在同名重载的
getBinaryData方法,可以在typemap声明时补全参数列表做精准匹配,格式为:%typemap(out) const char* A::getBinaryData(int32_t arg1, int32_t length); - SWIG内置变量
$inputN代表函数的第N个输入参数,不需要手动写封装代码取参数值,适配性更高。 - 配置完成后生成的封装代码中,
getBinaryData调用返回Pythonbytes类型,getName调用返回普通字符串,二者逻辑完全独立不会冲突。
内容的提问来源于stack exchange,提问作者mojo
相关产品推荐
相关产品推荐

