我尝试使用SWIG为Java包装一些C ++代码。我有一个C ++类(BitVector
),SWIG包装得很好。
我的问题是我在另一个类上有一个方法,它接受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
中有一些类型地图可以让您通过例如当底层C函数需要int
并且只是要读取它时,Java int*
,但是我找不到与SWIG生成的包装类型类似的东西。
答案 0 :(得分:0)
所以我想我已经解决了这个问题。是的,SWIG应该允许您将包装类传递给期望引用或指向此类的指针的函数。事实证明,我在这里遇到的问题是命名空间问题。
BitVector
实际上定义为CSA::BitVector
,并由using
所在的文件所在的文件获取const BitVector&
' d。这个using
指令没有进入我的SWIG文件,因此SWIG认为BitVector
和CSA::BitVector
是两种不同的类型,并将它们包装在一起。
我通过在.i文件中加入using CSA::BitVector
解决了这个问题。它并没有从传递包含中获得。