SWIG не принимает обернутые объекты для параметров указателя
Я пытаюсь использовать SWIG, чтобы обернуть некоторый код C++ для Java. У меня есть класс 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 автоматически генерировать код, чтобы позволить мне передавать завернутый объект, когда ожидается константная ссылка или указатель? Есть ли какая-то карта типов, которую я мог бы построить, чтобы вытащить BitVector.swigCPtr
выставить?
Все, что я могу найти в Google, это инструкции о том, как обращаться с указателями на примитивные типы. Есть раскладки в typemaps.i
для этого, что позволит вам передать, например, Java int
когда основная функция C хочет int*
и только собирается прочитать его, но я не могу найти ничего похожего для сгенерированных SWIG типов оболочек.
1 ответ
Так что я думаю, что решил это. Да, SWIG должен позволять вам передавать упакованный класс в функцию, ожидающую ссылку или указатель на такой класс. Оказывается, проблема, с которой я столкнулся, была проблема с пространством имен.
BitVector
действительно определяется как CSA::BitVector
и получает using
'в файле, в котором метод const BitVector&
проживает. это using
директива не попала в мой файл SWIG, поэтому SWIG подумала BitVector
а также CSA::BitVector
были два разных типа, и завернули их обоих.
Я решил проблему, включив using CSA::BitVector
в.i файле. Это не получалось от переходного включения.