extern 定义_Essential Cython - 2.7 - 定义并使用模板函数
项目地址:
https://github.com/tushushu/EssentialCythongithub.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 - 定义并使用模板函数的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: springboot aop使用_Spr
- 下一篇: 游戏中的数学与物理学 第二版_在游戏中启