函數模板推導中的偏序
問題:
問題:C 11 標準描述了偏序程序用於比較函數模板的特化,但其意義並不完全清楚。您能提供範例解釋嗎?
答案:為了確定一個函數模板是否比另一個函數模板更專業,該標準使用部分排序過程。此過程涉及為每個範本建立轉換後的函數類型,並對它們進行比較以確定哪個範本更專業。
第1 步:建立轉換後的函數類型對於每個模板,轉換後的函數類型是透過以特定類型(稱為合成類型)替換類型參數來建立的。這些合成類型是唯一的,不會在程式碼中的其他地方使用。
步驟2:將轉換後的類型與原始模板匹配匹配第一個模板的轉換後的函數類型與第二個模板的原始函數類型相反。然後以相反的方向重複該過程。
第3 步:確定專業化如果一個轉換產生匹配,而另一個轉換沒有產生匹配,則具有匹配的模板轉型被認為更加專業化。如果在任一方向都找不到匹配項,則兩個範本都不會被視為比另一個更專業。
範例:template<typename T, typename U> void foo(T, U); // #1 template<typename T> void foo(T const*, X<T>); // #2考慮兩個函數範本:
將#1b (void foo(int, bool)) 的轉換函數類型與#2 的原始函數類型進行匹配(#2) 失敗。但是,將轉換後的函數類型 #2b (void foo(char const*, X
以上是C 11 的偏序如何決定更專業的函數模板?的詳細內容。更多資訊請關注PHP中文網其他相關文章!