SWIG不接受指针参数的包装对象

时间:2014-06-20 22:59:43

标签: java c++ pointers swig

我尝试使用SWIG为Java包装一些C ++代码。我有一个C ++类(BitVector),SWIG包装得很好。

我的问题是我在另一个类上有一个方法,它接受const BitVector& ranges类型的参数,但是SWIG将该参数包装为SWIGTYPE_p_BitVector

我生成了两个不同的SWIG包装器文件:BitVector.javaSWIGTYPE_p_BitVector.java。当我从Java(实际上是Scala)调用该方法并呈现BitVector对象时,我的Scala编译器抱怨我在BitVector传递了它需要SWIGTYPE_p_BitVector的位置

SWIG是否应该自动生成代码以允许我在期望const引用或指针时传递包装对象?我可以构建某种类型的地图来拉出BitVector.swigCPtr字段吗?

我在Google上可以找到的有关如何处理指向原始类型的指针的说明。 typemaps.i中有一些类型地图可以让您通过例如当底层C函数需要int并且只是要读取它时,Java int*,但是我找不到与SWIG生成的包装类型类似的东西。

1 个答案:

答案 0 :(得分:0)

所以我想我已经解决了这个问题。是的,SWIG应该允许您将包装类传递给期望引用或指向此类的指针的函数。事实证明,我在这里遇到的问题是命名空间问题。

BitVector实际上定义为CSA::BitVector,并由using所在的文件所在的文件获取const BitVector&' d。这个using指令没有进入我的SWIG文件,因此SWIG认为BitVectorCSA::BitVector是两种不同的类型,并将它们包装在一起。

我通过在.i文件中加入using CSA::BitVector解决了这个问题。它并没有从传递包含中获得。