我有一个类Foo
,它需要ctor中的两个参数:
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会生成两个文件:
Foo的java ctor也是这样的:
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 :(得分:0)
我看到的一个问题是SWIG需要被告知模板实例化;否则,它不会为它们生成代码。
%template(spRenderer) vtkSmartPointer<vtkRenderer>;
%template(spWindow) vtkSmartPointer<vtkRenderWindow>;
%template(spInteractor> vtkSmartPointer<vtkRenderWindowInteractor>;