Использование 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 в директорах. Кажется, имеет смысл использовать те же типы, что и везде. Я надеюсь, что ответ все еще возможен.

Ответы на вопрос(1)

Ваш ответ на вопрос