我想将以下C ++代码包装到python模块中。
class minimal
{
public:
minimal()
{
}
~minimal()
{
}
template<class T>
void foo(T a)
{
auto z = a;
}
};
正如你所看到的,我有模板函数,我知道我不能在Python中调用模板化函数,但是我希望用int或string参数调用foo会因为类型推导而成功。仍然没有.cxx文件中的foo,但SWIG文档说,它支持类型扣除
所以我的目标是像这样的python代码工作:
#C++ analog: minimal.foo(123)
minimal().foo(123)
#C++: to minimal().foo(0.1)
minimal().foo(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)