首頁 >後端開發 >C++ >C 模板推導如何使用偏序來確定專業化?

C 模板推導如何使用偏序來確定專業化?

Linda Hamilton
Linda Hamilton原創
2024-12-02 10:20:12279瀏覽

How Does C   Template Deduction Determine Specialization Using Partial Ordering?

模板推導中的偏序過程

偏序過程決定了C模板推導中函數模板之間的特化關係。它涉及為每個模板創建轉換後的函數類型並使用它們進行比較。

  1. 轉換後的函數類型:
    對於每個模板,透過取代唯一的來建立轉換後的函數類型其函數類型中模板參數的類型。
  2. 匹配參數和參數:
    一個模板的轉換後的函數類型與另一個模板的原始函數模板進行匹配,使用以下兩種情況:

    • 轉換後的type-1 作為參數模板和原始template-2 作為參數模板
    • 轉換後的type-2 作為參數模板,原始template-1 作為參數template
  3. 匹配成功並排序:
    如果類型推導在任何一種情況下都能成功地將轉換後的函數類型與原始函數模板匹配,則一個模板多比其他專業。如果兩個方向都成功匹配,則兩個模板都不會更專業。

範例:

考慮這兩個函數範本:

template<typename T, typename U>
void foo(T, U); // original #1

template<typename T>
void foo(T const*, X<T>); // original #2

符合變換後的types:

  • 符合變換後的types:

  • 1b vs. #2: 類型推導無​​法匹配參數。

2b vs. #1: 型別推導可以符合參數 ( T = 字元常數*,U = X)。

結論:重載 #2 比 #1 專業。

以上是C 模板推導如何使用偏序來確定專業化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn