首頁 > 後端開發 > C++ > 偏序如何決定函數模板之間的專業化?

偏序如何決定函數模板之間的專業化?

Barbara Streisand
發布: 2024-12-02 07:18:12
原創
773 人瀏覽過

How Does Partial Ordering Determine Specialization Between Function Templates?

模板推導中的偏序過程

模板推導中的偏序過程決定了兩個函數模板之間的特化關係。它涉及兩個階段:

第1 階段:轉換

對於每個模板,部分排序過程透過取代所有類型、非類型來建立「轉換後的函數類型” ,以及具有獨特、未使用類型的模板模板參數。

第2 期:比較

轉換後的函數型別以兩種方式比較:

  • 前向匹配:模板 1的轉換後函數類型與原始函數類型進行匹配模板2的函數類型
  • 向後匹配:轉換後的函數類型模板 2 與模板 1 的原始函數類型進行匹配。

如果其中一個匹配成功而另一個匹配失敗,則匹配成功的模板被認為更專業。如果兩個匹配都不成功,則兩個模板都不是更專業。

範例:

考慮以下兩個函數範本:

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

template<typename T>
void foo(T const*, X<T>); // Template 2
登入後複製

確定哪個範本比較專業,我們:

確定哪個範本比較專業,我們:

    1。建立轉換後的函數型別:
  • 轉換後的範本1:void foo(int, bool)

轉換後的範本2:void foo(char const* , X)

    2。比較轉換後的函數型別:
  • 正向比對:void foo(int, bool) 無法符合 void foo(T const*, X)。

向後配對: void foo(char const*, X) 可以透過以下方式與 void foo(T, U) 配對推導 T = char const* 和 U = X

結論:模板 2 比模板 1 更專業。

以上是偏序如何決定函數模板之間的專業化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板