我正在嘗試使用SWIG來封裝Java的一些C++代碼。我有一個C++類(BitVector
),SWIG包裝很好。SWIG不接受用於指針參數的包裝對象
我的問題是,我也有一個方法在另一個類需要參數類型const BitVector& ranges
,但SWIG包裝該參數爲SWIGTYPE_p_BitVector
。
我得到兩個不同的SWIG包裝文件生成:a 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生成的包裝類型。
簡短的回答是yes SWIG通常處理這個就好了,它不應該爲const引用版本創建一個單獨的類。 .i文件可能有問題,你可以發佈.i文件的部分顯示includes和bitvector defs嗎?你有沒有試過SWIG附帶的一些測試文件,最簡單的例子會顯示這應該工作,應該編譯好。 – Schollii