You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:54:01