SWIG 如何正确包装 std::vector<double *>
Posted
技术标签:
【中文标题】SWIG 如何正确包装 std::vector<double *>【英文标题】:SWIG How to correctly wrap std::vector<double *> 【发布时间】:2021-12-06 13:32:12 【问题描述】:我们想在 Java 中使用的一些 c++ 代码使用双指针向量,如下所示:
typedef std::vector<double *> VEC_pD;
我认为这样包装就足够了:
%include "typemaps.i"
%include "cpointer.i"
%include "stl.i"
%pointer_class(double, doublep);
%template (VEC_pD) std::vector<double*>;
typedef std::vector<double *> VEC_pD;
虽然 double *
被正确包装到 doublep.java 中,但向量的包装不使用 douplep,而是使用自动生成的类型 SWIGTYPE_p_double
。
我正在使用 SWIG 4.0.2。非常感谢任何提示如何告诉矢量模板如何使用 doublep。
【问题讨论】:
试试%template (VEC_pD) std::vector<doublep>;
。我最近包装了一个vector<vector<T>>
,并在外部定义中使用了vector<T>
的包装名称。我对vector<T>
的包装名称也是相同的C++ typedef
;我不知道这是否重要。
【参考方案1】:
谢谢 John,确实切换到 doublep 生成了正确的 java 类。
%template (VEC_pD) std::vector<doublep>;
【讨论】:
我很快就谈过了。有了上面 typedef std::vector以上是关于SWIG 如何正确包装 std::vector<double *>的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 列表在 C++ 中使用 SWIG 分配 std::vector?