SWIG C ++ / Java Director - предположить переопределение для метода, определенного с помощью javaout? - PullRequest
3 голосов
/ 10 марта 2020

Я хочу повторить некоторые методы среди различных классов с поддержкой директора SWIG, где эти методы могут быть вызваны из C ++ и имеют реализацию Java (то же самое во всех случаях). Я сделал это успешно, введя суперкласс:

#ifdef SWIG
%feature("director", assumeoverride=1) Frobbable;
%typemap(javaout) int frob() {
    return my.package.Foo.frob(this);
}
#endif
class Frobbable {
public:
    virtual ~Frobbable() {}
    virtual int frob() = 0;
};

#ifdef SWIG
%feature("director", assumeoverride=1) Child;
#endif
class Child : public Frobbable {
    ...
};

Проблема в том, что моя javaout реализация не рассматривается как переопределение кодом инициализации директора, и пытаюсь вызвать frob() из C ++ внутри Child приводит к исключению при попытке вызвать виртуальный метод. Используя assumeoverride=1, он вызовет мой метод Java, который в порядке, но чувствует себя немного хрупким.

Есть ли лучший способ поделиться реализациями Java между несколькими классами SWIG, вызываемыми из C ++ ? Я пытаюсь избежать объявления / определения этих методов в каждом Child классе.

...