函式模板為什麼沒有偏特化?問題解答

2021-04-30 14:44:37 字數 305 閱讀 2209

推薦herb sutter的文章:why not specialize function templates?

通過該文,明白了:

1. 沒有函式偏特化,僅僅是因為c++標準語言說不行(you can't partially specialize them -- pretty much just because the language says you can't),另外我覺得有了函式過載,函式偏特化也沒什麼用

2. 函式的全特化並不參與函式過載, 因為擔心全特化版本會弄亂函式過載解析(不是很明白)

3. 函式過載的解析次序依次是:

函式模板「偏特化」 (C )

模板是c 中很重要的乙個特性,利用模板可以編寫出型別無關的通用 極大的減少了 量,提公升工作效率。c 中包含類模板 函式模板,對於需要特殊處理的型別,可以通過特化的方式來實現特定型別的特殊操作。最近工作中,需要處理cont這種復合型別和t這種自定義型別的模板特化,因為cont型別有五種左右需要特殊處...

為什麼不特化函式模板

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

為什麼不特化函式模板

1.c 標準規定,函式模板不能偏特化 2.函式模板的特化並不參與過載決議 非模板函式是c 的一等公民 如果編譯器沒有發現合適的一等公民,那麼主函式模板作為c 中的二等公民被納入考慮 如果還不能選出唯一的主函式模板,編譯器會根據一組相當晦澀的規則確定出那個主函式模板是最特化的 函式模板特化並不參與過載...