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 - 定义并使用模板函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot aop使用_Spr
- 下一篇: 怎么安装python的包_python下