如何通过Swig为Python类创建别名?

Jos*_*hua 3 python alias swig templates rename

我已经创建了一个C++库,并成功使用swig使其可以通过python访问.模板中大量使用模板,每个模板类型都通过swig映射到它自己的python类,如下所示:

%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;
Run Code Online (Sandbox Code Playgroud)

但是,我真的希望有一个python使用的'默认'模板

a = Image("filename")
Run Code Online (Sandbox Code Playgroud)

实例化Image<double>而不必总是键入

a = Imagedouble("filename")
Run Code Online (Sandbox Code Playgroud)

Swig文档说明:

不应使用%template指令在同一范围内多次包装相同的模板实例.这将产生错误.导致此错误的原因是模板扩展导致两个具有相同名称的相同类.这会生成符号表冲突.此外,为了减少代码膨胀的可能性,仅将特定实例化仅包装一次可能更有效.

所以为了避免符号表冲突,我试过了

%rename(Image) Image<double>;
%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;
Run Code Online (Sandbox Code Playgroud)

在接口文件中.然而,swig然后抱怨Image被重新定义.

制作别名的最佳方法是Image和Imagedouble都引用C++ Image<double>?非常感谢您提供的任何帮助.

-Josh

Jos*_*hua 7

如果这有助于将来的某个人,那么执行上述操作的方法是将以下内容添加到接口文件中:

%pythoncode %{
Image = Imagedouble
%}
Run Code Online (Sandbox Code Playgroud)

我没有意识到有一种方法可以在接口文件中编写标准的python代码.