Zaczynam rozumieć SWIG, a najnowsza wersja (v3.0) SWIG wydaje się obsługiwać wszystko, czego potrzebuję po wyjęciu z pudełka, w tym C++ 11 funkcje, ale wpadłem w sztylet, jeśli chodzi o używanie shared_ptr z moimi klasami reżyserskimi.Używanie shared_ptr z SWIG Directors dla Java
Udało mi się uzyskać shared_ptr
do pracy z normalnymi klasami proxy, ale teraz, w przypadku moich reżyserów, wydaje się, że nie są one wspierane po wyjęciu z pudełka. To daje mi automatycznie wygenerowany typ, taki jak SWIGTYPE_p_std__shared_ptrT_MyDataType_t
i generuje zepsuty interfejs, ponieważ nie używa tych samych typów, których używają klasy proxy.
mam uproszczony przykład co usiłuję zrobić (run z swig -c++ -java Test.i
na 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() {};
};
zasadzie to, co ja zamierzam być jest rozszerzeniem CallbackBaseClass
w Javie i chcę móc przekazywać wokół moich zawijanych typów shared_ptr. Klasa non-director generuje typy shared_ptr w sam raz. Pliki proxy dyrektora klasy są generowane poprawnie, ale metody SwigDirector_
w opakowaniu odnoszą się do nieprawidłowych typów.
Wygląda na to, że mogłem ręcznie naprawiać pliki, zmieniając typ SWIGTYPE_p_std__shared_ptrT_MyDataType_t
na MyDataType
wszędzie, ale mam nadzieję, że ktoś o większej wiedzy na temat słodyczy może odpowiedzieć na pytanie, aby można było wygenerować to poprawnie.
Najlepsza wskazówka, jaką mam, to here, ale nadal próbuję dowiedzieć się, jak poprawnie korzystać z map tego typu, zwłaszcza dla shared_ptr
, a nie podstawowych elementów podstawowych.
UPDATE:
Dokumentacja says:
Uwaga: Nie ma jeszcze wsparcia dla% shared_ptr i funkcji dyrektora.
Chociaż nie daje wskazówek, dlaczego. Chciałbym wiedzieć, czy jest to niemożliwe z reżyserami swig, jeśli istnieje dobry powód, dla którego nie należy używać shared_ptr w reżyserach. Wydaje się, że warto używać tych samych typów, których używa się wszędzie indziej. Mam nadzieję, że odpowiedź jest nadal możliwa.