我已经创建了一个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
答案 0 :(得分:7)
如果将来有人帮助某人,那么上面描述的方法是将以下内容添加到界面文件中:
%pythoncode %{
Image = Imagedouble
%}
我没有意识到有一种方法可以在接口文件中编写标准的python代码。