该问题基于以下问题:如何使用swig实例化模板类的模板方法?。
但是,与该问题相比,我尝试包装的代码略有不同:
class MyClass {
public:
template <class T>
void f1(const string& firstArg, const T& value);
};
该MyClass的是一个普通的C ++类,一个模板函数F1。
尝试包装MyClass :: f1 :,即Swig .i文件
%template(f1String) MyClass::f1<std::string>;
通过以上操作,Python客户端可以执行
o = MyClass
str1 = "A String"
o.f1String("", str1)
此接口要求Python客户端了解所有不同的f1函数名,每个函数名根据类型而有所不同。不太干净。
可以通过重载,在接口文件中扩展来获得更干净的接口,例如
%extend MyClass {
void f1(const string& s, const string& s1){
$self->f1(s, s1);
}
void f1(const string& s, const int& anInt){
$self->f1(s, anInt);
}
}
这允许这样的客户端代码:
o = MyClass
str1 = "A String"
anInt = 34
o.f1("", str1)
o.f1("", anInt)
问题是,有没有办法使用Swig在不扩展的情况下(通过扩展)获取以上接口?
相关分类