我想将以下C ++代码包装到python模块中。
class minimal
{
public:
minimal()
{
}
~minimal()
{
}
template<class T>
void foo(T a)
{
auto z = a;
}
};
如您所见,我具有模板函数,并且我知道我无法在Python中调用模板函数,但是我希望由于类型推断,使用int或字符串参数调用foo能够成功。 .cxx文件中仍然没有foo,但是SWIG文档说它支持类型推导
所以我的目标是像这样进行python代码工作:
#C++ analog: minimal.foo(123)
minimal().foo(123)
#C++: to minimal().foo(0.1)
minimal().foo(0.1)
有可能吗?还是我的想法完全错误?
答案 0 :(得分:1)
使用%template
指令来指示SWIG创建特定模板的实现。仅声明的模板实例可用。
示例:
%module test
%inline %{
class minimal
{
public:
minimal()
{
}
~minimal()
{
}
template<class T>
void foo(T a)
{
auto z = a;
}
};
%}
%template(foo) minimal::foo<int>;
%template(foo) minimal::foo<double>;
示例:
>>> import test
>>> m=test.minimal()
>>> m.foo(1)
>>> m.foo(1.5)
>>> m.foo('abc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\test.py", line 115, in foo
return _test.minimal_foo(self, *args)
NotImplementedError: Wrong number or type of arguments for overloaded function 'minimal_foo'.
Possible C/C++ prototypes are:
minimal::foo< int >(int)
minimal::foo< double >(double)