SWIG如何正确包装std::vector<double *>,使其使用自定义doublep类型
解决方法
问题核心是SWIG实例化std::vector模板时,不知道double*要对应你自定义的doublep类,默认生成了独立的SWIGTYPE_p_double类型,只需要在模板实例化前加显式类型映射即可。
修改后的完整接口代码
%include "typemaps.i" %include "cpointer.i" %include "stl.i" %pointer_class(double, doublep); // 新增以下类型映射,绑定double*对应Java侧的doublep类 %typemap(javaclassname) double* "doublep"; %typemap(jtype) double* "doublep"; %typemap(jni) double* "jlong"; %typemap(in) double* %{ $1 = *(double **)&$input; %} %typemap(out) double* %{ *(double **)&$result = $1; %} %template (VEC_pD) std::vector<double*>; typedef std::vector<double *> VEC_pD;
说明
%typemap(javaclassname)指定了double*在Java层对应的类名是doublep- 配套的
jtype、jni、in、out映射保证了vector存取元素时,和doublep类的指针存储、转换逻辑完全兼容 - 以上配置兼容SWIG 4.0.2版本,修改后生成的
VEC_pD类所有接口都会使用doublep类型,不再生成SWIGTYPE_p_double
内容的提问来源于stack exchange,提问作者jensgw
相关产品推荐
相关产品推荐

