SWIG: невозможно игнорировать метод в классе C ++ - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь обернуть библиотеку C ++ с помощью Swig, и у меня возникают проблемы с перегруженным методом (и не помогает, что я не трогал C ++ в течение 18 лет:)

Вот очень упрощенная структура класса:

class TView : public TObject, public TStreamable {
    public:
        virtual TPalette& getPalette() const;
}

class TGroup : public TView {
    // ...
}

class TWindow: public TGroup {
    virtual TPalette& getPalette() const;
}

Файл swig (опять же, упрощенный, выглядит так):

%module(directors="1") tvision
%feature("director") TApplication;
%feature("director") TProgram;
%feature("director") TProgInit;
%feature("director") TWindow;
%feature("director") TWindowInit;
%feature("director") TView;
%feature("director") TGroup;
// Obviously a shotgun approach hoping one of these works :P
%rename ("$ignore") TWindow::getPalette; 
%ignore TWindow::getPalette; 
%rename ("getPalette2") "TWindow::getPalette";
//...
%include "tv/view.h"
%include "tv/group.h"
%include "tv/window.h"

Когда я генерирую оболочки Java и пытаюсь скомпилировать его,Я получаю эту ошибку:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project tvsample: Compilation failure: Compilation failure: 
[ERROR] /home/jdlee/src/turbovision/swig/src/generated/java/com/steeplesoft/turbovision/internal/tvisionJNI.java:[1348,45] incompatible types: short cannot be converted to com.steeplesoft.turbovision.internal.TPalette
[ERROR] /home/jdlee/src/turbovision/swig/src/generated/java/com/steeplesoft/turbovision/internal/TWindow.java:[129,16] getPalette() in com.steeplesoft.turbovision.internal.TWindow cannot override getPalette() in com.steeplesoft.turbovision.internal.TView
[ERROR]   return type short is not compatible with com.steeplesoft.turbovision.internal.TPalette

Две вещи.Во-первых, TWindow :: getPalette следует игнорировать, но это не так.Во-вторых, SWIG генерирует этот метод Java:

public short getNumber() {
  return tvisionJNI.TWindow_number_get(swigCPtr, this);
}

У кого-нибудь есть ответ на любой вопрос?В идеале должен быть один метод TWindow # getPalette (), который возвращает TPalette.Если бы я мог это исправить, это могло бы решить проблему игнорирования, поскольку я только пытаюсь игнорировать метод, чтобы посмотреть, смогу ли я просто обойти проблему компиляции.

Помогите?Пожалуйста?:)

...