【发布时间】:2014-06-20 22:59:42
【问题描述】:
我正在尝试使用 SWIG 为 Java 包装一些 C++ 代码。我有一个 SWIG 封装得很好的 C++ 类 (BitVector)。
我的问题是我在另一个类上也有一个方法,该方法采用 const BitVector& ranges 类型的参数,但 SWIG 将该参数包装为 SWIGTYPE_p_BitVector。
我生成了两个不同的 SWIG 包装文件:BitVector.java 和 SWIGTYPE_p_BitVector.java。当我从 Java(实际上是 Scala)调用该方法并呈现一个 BitVector 对象时,我的 Scala 编译器抱怨我正在传递一个 BitVector 它想要一个 SWIGTYPE_p_BitVector 的地方。
SWIG 是否应该自动生成代码以允许我在需要 const 引用或指针时传递包装的对象?是否可以构建某种类型映射来拉出BitVector.swigCPtr 字段?
我在 Google 上只能找到有关如何处理指向原始类型的指针的说明。 typemaps.i 中有一些类型映射可以让你通过,例如一个 Java int,当底层 C 函数想要一个 int* 并且只打算读取它时,我找不到任何与 SWIG 生成的包装器类型类似的东西。
【问题讨论】:
-
简短的回答是肯定的 SWIG 通常可以很好地处理这个问题,它不应该为 const 参考版本创建单独的类。 .i 文件可能有问题,您可以发布 .i 文件中显示包含和位向量定义的部分吗?您是否尝试过 SWIG 附带的一些测试文件,最简单的示例将表明这应该可以工作并且应该可以正常编译。