為什麼不特化函式模板

2022-08-04 11:21:12 字數 485 閱讀 2459

1. c++標準規定,函式模板不能偏特化

2. 函式模板的特化並不參與過載決議

非模板函式是c++的一等公民

如果編譯器沒有發現合適的一等公民, 那麼主函式模板作為c++中的二等公民被納入考慮

如果還不能選出唯一的主函式模板,編譯器會根據一組相當晦澀的規則確定出那個主函式模板是最特化的

函式模板特化並不參與過載決議.只有在某個主模板被過載的決議前提下,其特化版本才有可能被使用.而且編譯器在選擇住模板的時候並不關心他是否有某個特化版本.

如果你想要將乙個主模板特化,同時又希望該特化版本能夠參與過載決議, 只需將其寫成普通函式. 如果你確實提供了某個函式模板的過載,那麼你應該避免為他提供特化.

如果你正在寫乙個可能需要被特化的主函式模板的話,請盡量將它寫成乙個孤立的,永遠不該被特化或過載的函式模板, 並將其具體實現全部放入乙個包含了乙個靜態函式的類模板當中, 這麼一來任何人都可以對後者進行特化(包括偏特化), 而同時又不會影響到主函式模板的過載決議.

為什麼不特化函式模板

1.c 中主要有哪兩種形式的模板,它們分別如何進行特化?c 中有類模板與函式模板之分。這兩種模板的工作方式並不完全一樣,最明顯的區別在於過載,普通c 類是不能過載的,因此類模板也不能夠過載。另一方面,普通的c 函式如果名字相同 且函式簽名不同 就會發生過載,因而函式也允許過載。此外類模板可以被偏特化...

函式模板的特化

函式模板的特化 該定義中乙個或多個模板形參的實際型別或實際值是指定的。特化形式如下 關鍵字template後面接一對空的尖括號 再接模板名和一對尖括號,及括號中指定這個特化定義的模板形參 函式形參表 函式體 template int compare const char const v1,const...

函式模板的特化

include include using namespace std 泛型版本 template int compare const t v1,const t v2 為實參型別 const char 提供特化版本 template int compare const char const v1,c...