如何通过Swig为Python类创建别名?
a = Imagedouble("filename")
我创建了一个C++库,并成功使用swig让它可以通过Python访问。这个库里面大量使用了模板,每种模板类型都通过swig映射到自己的Python类,像这样:
%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;
不过,我其实希望Python能使用一个“默认”的模板,这样就可以直接实例化 Image<double>
,而不需要每次都输入
a = Image("filename")
Swig的文档中提到:
不要在同一个作用域内多次使用 %template 指令来包装同一个模板实例化。这会导致错误。这个错误的原因是模板扩展会生成两个同名的类,造成符号表冲突。而且,只包装特定的实例化一次,可能会更高效,能减少代码膨胀的可能性。
为了避免符号表冲突,我在接口文件中尝试了
%rename(Image) Image<double>;
%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;
但是,swig却抱怨说Image被重新定义了。
请问有什么好的方法可以创建一个别名,让Image和Imagedouble都指向C++的 Image<double>
?非常感谢你能提供的任何帮助。
-Josh
1 个回答
8
如果将来有人需要这个信息,以上所描述的做法是要在接口文件中添加以下内容:
%pythoncode %{
Image = Imagedouble
%}
我之前没有意识到可以在接口文件中写标准的Python代码。