Я хочу повторить некоторые методы среди различных классов с поддержкой директора 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
классе.