2014-10-21 1 views
0

У меня есть класс Foo который два параметра в CTOR:Java-SWIG и vtkSmartPointer

typedef vtkSmartPointer<vtkRenderer> t_renderer; 
typedef vtkSmartPointer<vtkRenderWindow> t_rwindow; 
typedef vtkSmartPointer<vtkRenderWindowInteractor> t_interactor; 

class Foo { 
public: 
    Foo(renderer> ren, interactor inter); 
    // ... 
} 

// Usage: 
t_renderer ren = t_renderer::New(); 
t_rwindow rwin = t_rwindow::New(); 
t_interactor inter = t_interactor::New(); 

Foo f(ren, inter); 
f.method1(); 
// ... 

С SWIG Я хотел бы иметь то же самое в Java:

vtkRenderer ren = new vtkRenderer(); 
// ... 
Foo f = new Foo(ren, inter); 
f.method1(); 
// ... 

Проблема заключается в том , что SWIG генерирует два файла:

  • SWIGTYPE_p_vtkSmartPointerT_vtkRenderer_t.java
  • SWIGTYPE_p_vtkSmartPointerT_vtkRenderWindowInteractor_t.java

Также ява т е р о Foo выглядит следующим образом:

public Animator(SWIGTYPE_p_vtkSmartPointerT_vtkRenderer_t renderer, SWIGTYPE_p_vtkSmartPointerT_vtkRenderWindowInteractor_t inter) { 
    ... 
} 

Так что мой вопрос: Как я могу избежать этого в SWIG? Мой файл интерфейса:

%module(directors="1", allprotected="1") swiganimator 

%include <std_string.i> 
%include <std_shared_ptr.i> 

%{ 
    #include <memory> 
    #include <string> 
    #include "Foo.hpp" 
%} 

%shared_ptr(OtherType) 

%include "Foo.hpp" 

Надеюсь, вы не сможете решить проблему, описанную здесь.

ответ

0

Одна проблема, которую я вижу, заключается в том, что SWIG должен быть проинформирован о создании шаблонов; в противном случае он не будет генерировать код для них.

%template(spRenderer) vtkSmartPointer<vtkRenderer>; 
%template(spWindow)  vtkSmartPointer<vtkRenderWindow>; 
%template(spInteractor> vtkSmartPointer<vtkRenderWindowInteractor>;