【问题标题】:SWIG How to correctly wrap std::vector<double *>SWIG 如何正确包装 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&lt;doublep&gt;;。我最近包装了一个vector&lt;vector&lt;T&gt;&gt;,并在外部定义中使用了vector&lt;T&gt; 的包装名称。我对vector&lt;T&gt; 的包装名称也是相同的C++ typedef;我不知道这是否重要。

标签: c++ swig


【解决方案1】:

谢谢 John,确实切换到 doublep 生成了正确的 java 类。

%template (VEC_pD) std::vector<doublep>;

【讨论】:

  • 我很快就谈过了。有了上面 typedef std::vector VEC_pD; 的包装本身使用双倍。但是,VEC_pD 代码中的所有使用现在都转到 SWIGTYPE_p_std__vectorT_double_p_t,因为不再包装双指针的原始向量。
猜你喜欢
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 2020-12-07
  • 2018-09-14
相关资源
最近更新 更多