如何在 SWIG 中为 c++ 创建模板函数?

Posted

技术标签:

【中文标题】如何在 SWIG 中为 c++ 创建模板函数?【英文标题】:How to create template function in SWIG for c++? 【发布时间】:2013-12-23 13:24:56 【问题描述】:

我在 c++ 文件中有一个带有以下签名的模板函数

template <class T> std::vector<T> function(T);  

我想用 Swig 制作一个接口文件来将 main.cpp 包装到 python 文件中。 对于 int float 和 double 类型,我应该如何在 Swig 中包含 Tfunction?

//main.i
%module main
%include "carrays.i"
%array_class(double, doubleArray);

%
   extern template <class T> std::vector<T> Tfunction(T);
%

extern template <class T> std::vector<T> Tfunction(T);

【问题讨论】:

【参考方案1】:

由于 Python 不知道模板,因此您必须为每个参数创建一个类型。您可以使用一个方便的 %template 指令:

%template(TfunctionInt) Tfunction<int>;

这在section 6.18 of SWIG docs中有详细解释。

【讨论】:

以上是关于如何在 SWIG 中为 c++ 创建模板函数?的主要内容,如果未能解决你的问题,请参考以下文章

将 SWIG 与 C++ 模板函数一起使用

Python 错误:在 SWIG 生成的 C++ 模板代码模块中未定义构造函数

带有类型推导的 swig python 模板函数

使用 SWIG 绑定 Python/C++ 模板

Swig C++ to C#:如何从 C++ 包装类以使模板类中的方法在 C# 的派生类中可用?

SWIG / C#:命名空间和模板