Для типов, которые SWIG ничего не знает (т.е. не видел ничего больше, чем форвардная декларация), лучшая оболочка, которую он может генерировать, примерно отражает то, что вы можете сделать с объявленным вперед классом на C++, - оно обернуто как что-то, что ведет себя как непрозрачный указатель. Это вид SWIG_P_class1
. Вы можете делать разумные вещи с этим, например. если у вас есть метод, который возвращает ссылки или указатели на экземпляры, вы могли бы вызвать это, чтобы получить объект для перехода на foo
.
Однако вы, вероятно, не хотите использовать, что много реальных интерфейсы, поэтому данный файл заголовок, который мы хотим обернуть, что выглядит следующим образом:
class class1;
bool foo(class1& parm);
Вы можете обернуть его благоразумно, давая Swig частичного (или полным, если вы предпочитаете) определение class1
, например:
%module test
class class1 {
};
%include "test.hh"
вызовет разумный class1
и foo
быть выставлены на стороне Java, так что вы можете использовать их в Java, как в:
test.foo(new class1());
точно так же, как вы надеетесь.
Конечно, вам необходимо предоставить сгенерированное C++ достаточное знание класса class1
, точно так же, как и с любым другим кодом на C++. Самый простой способ сделать это - сделать ваш интерфейс SWIG выглядеть примерно так:
%module test
%{
#include "class1_defined_here.hh"
%}
class class1 {
};
%include "test.hh"
Вы предпринимали какие-либо усилия самостоятельно? – simchona