簡體   English   中英

函數模板顯式特化c ++

[英]Function template explicit specialization c++

我的書中提到了兩種明確專業化的方法:

template <> void Swap<int> (int &, int &);
template <> void Swap(int &, int&);

兩者有什么區別? 什么時候使用另一個?何時使用另一個? 函數名后面的<>是什么?

兩者有什么區別?

沒有區別

在第二種情況下,您要讓編譯器從特化的簽名中執行類型推導 因此,兩種形式都為T = int聲明了Swap<T>()的特化。

什么時候使用另一個?何時使用另一個?

在您的可讀性或易維護性方面,當一種形式或另一種形式滿足您的要求時,您可以自行決定。

函數名后面的<>是什么?

當它出現在函數名之后 ,它是指定模板參數的語法:

template<typename T = double, typename U = char>
void foo();

foo<int, bool>(); // Specifies explicit template arguments
foo<>(); // Use default template arguments
foo(); // Same as above, allowed for *function* templates only

當它出現 template 關鍵字之后時 ,它是引入(類或函數)模板特化的語法。

第一個示例是顯式專門化模板的真正方法,第二個示例只是第一種方式的快捷方式,因為編譯器可以從函數簽名中推斷出類型本身。 結果是一樣的 ,沒有真正的區別。

<>用於將模板參數提供給模板化結構,在這種情況下,模板參數是操縱數據的類型,專門化是類型int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM