函數範本:部分特化與重載
在 C 中,語言標準不允許函數範本部分特化。但是,某些編譯器可能提供允許它的擴充。
定義的部分專業化
部分專業化涉及使用比原始模板更專業的模板參數集來定義模板。對於類別模板,這表示為部分或全部模板參數指定特定值。
範例:部分專業化和重載
提供的程式碼示範了重載,而不是部分重載專業化。定義了以下函數:
template<typename T1, typename T2> inline T1 max(T1 const& a, T2 const& b) { return a < b ? b : a; } template<typename T> inline T const& max(T const& a, T const& b) { return 10; }
雖然第二個函數的模板參數型別相同,但它不是部分特化。它是一個重載第一個函數的單獨函數。
函數模板特化
另一方面,允許函數模板完全特化。它涉及定義一個模板,並明確指定所有模板參數。但是,它並不直接受 C 標準支持,僅作為擴展在某些編譯器中實現。
部分專業化編譯器擴充
在 Microsoft Visual Studio 2010 Express 中,編譯器擴充功能允許類別和函數範本的部分特化。這不是標準行為,可能會導致可移植性問題。
以上是C 函數模板:重載與(非標準)部分專業化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!