Использование shared_ptr с директорами SWIG для Java
Я начинаю знакомиться с SWIG, и последняя версия (v3.0) SWIG, кажется, обрабатывает практически все, что мне нужно из коробки, включая функции C ++ 11, но я столкнулся с проблемой приходит к использованию shared_ptr с моими директорами классов.
Я смог получитьshared_ptr
работать с обычными прокси-классами замечательно, но сейчас, на моих директоров, кажется, не поддерживается из коробки. Это дает мне автоматически сгенерированный тип, какSWIGTYPE_p_std__shared_ptrT_MyDataType_t
и генерирует неработающий интерфейс, потому что он не использует те же типы, что и прокси-классы.
У меня есть упрощенный пример того, что я пытаюсь сделать (запустить сswig -c++ -java Test.i
на swig 3.0):
Test.i
%module(directors="1") test
%{
%}
%include <std_shared_ptr.i>
%shared_ptr(MyDataType)
class MyDataType {
public:
int value;
};
class NonDirectorClass {
public:
std::shared_ptr<MyDataType> TestMethod();
};
%feature("director") CallbackBaseClass;
class CallbackBaseClass {
public:
virtual ~CallbackBaseClass() {};
virtual std::shared_ptr<MyDataType> GetDataFromJava() {};
};
В основном то, что я собираюсь сделать, это расширениеCallbackBaseClass
в Java, и я хочу иметь возможность передавать мои обернутые типы shared_ptr. Класс non-Director генерирует типы shared_ptr просто отлично. Прокси-файлы класса Director сгенерированы правильно, ноSwigDirector_
методы в оболочке ссылаются на неправильные типы.
Кажется, что я мог бы вручную восстановить файлы, изменив типSWIGTYPE_p_std__shared_ptrT_MyDataType_t
вMyDataType
везде, но я надеюсь, что кто-то с большим знанием может ответить на вопрос, так что это может быть сгенерировано правильно.
Лучшая подсказка у меня естьВот, но я все еще пытаюсь выяснить, как правильно использовать эти карты типов, особенно дляshared_ptr
а не основные примитивы.
ОБНОВИТЬ:
Документацияговорит:
Примечание. В настоящее время нет поддержки% shared_ptr и функции директора.
Хотя это не указывает на то, почему. Я хотел бы знать, если это невозможно с директорами Swig, если есть веская причина, почему бы не использовать shared_ptr в директорах. Кажется, имеет смысл использовать те же типы, что и везде. Я надеюсь, что ответ все еще возможен.