欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

extern 定义_Essential Cython - 2.7 - 定义并使用模板函数

发布时间:2025/3/13 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 extern 定义_Essential Cython - 2.7 - 定义并使用模板函数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

项目地址:

https://github.com/tushushu/EssentialCython​github.com

参考书籍: 《Essential C++ 中文版》

编程环境: MacOS + Jupyter Notebook + Python 3.6

%

2.7 定义并使用模板函数

2.6的例子中,每个函数体都颇为相像。唯一的差别就是参数的类型,一个是vector<int>型,一个是vector<float>型。需要一种机制,让我们得以将单一函数的内容与各种类型的vector绑定起来。所谓function template(函数模板)便提供了这样的机制。 function template以关键字template开场,其后紧接着以成对尖括号(<>)包围起来一个或多个标识符。这些标识符用以表示我们希望稍后决定的数据类型。用户每次利用这一模版产生函数,都必须提供确实的类型信息。这些标识符事实上扮演着占位符的角色,用来放置函数参数列表及函数体中的某些实际数据类型。例如:

template

一般而言,如果函数具备多种实现方式,我们可将它重载,其每份实例提供的是相同的通用服务。如果我们希望让程序代码主体不变,仅仅改变其中用到的数据类型,可以通过function template达到目的。 Cython提供了融合类型(fused type)可以使用一个类型定义来引用多个类型。这使我们可以编写一个可以对多种类型的值进行操作的静态类型的cython函数。因此,融合类型允许泛型编程,并且类似于C++的template。

%%

虽然上面的例子可以运行,但是Cython还不支持vector[int_or_float] &v这种写法(不支持&符号),所以还是需要extern C++来实现vector_sum的模板函数。

template

然后用Cython脚本导入Cpp函数。

cdef

注意template_vector_sum后面也要写上[T],否则Cython无法识别出T(被这里坑了好久T-T)。写测试脚本如下:

%%

总结

以上是生活随笔为你收集整理的extern 定义_Essential Cython - 2.7 - 定义并使用模板函数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。