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 файле. Это не получалось от переходного включения.

Другие вопросы по тегам