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

时间:2010-12-28 21:15:02

标签: python templates swig alias rename

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

%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;

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

a = Image("filename")

实例化Image<double>,而无需始终输入

a = Imagedouble("filename")

Swig文档声明:

  

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

为避免符号表冲突,我尝试了

%rename(Image) Image<double>;
%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;

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

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

-Josh

1 个答案:

答案 0 :(得分:7)

如果将来有人帮助某人,那么上面描述的方法是将以下内容添加到界面文件中:

%pythoncode %{
Image = Imagedouble
%}

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