首頁 > 後端開發 > C++ > 為什麼 C 不能在不可推導的上下文中推導模板參數?

為什麼 C 不能在不可推導的上下文中推導模板參數?

Barbara Streisand
發布: 2024-12-26 13:47:10
原創
897 人瀏覽過

Why Can't C   Deduce Template Arguments in Non-Deducible Contexts?

為什麼 C 不能在不可推導的上下文中推導出 T?

在給定的程式碼片段中,模板結構體 TMap 定義為巢狀類型 Type ,表示使用模板參數 T 的 std::map 的特化。但是,編譯器無法在函數中推導出T test.

不可推導的上下文

發生錯誤的原因是程式碼使用類型為typename TMap:: Type& 的參數呼叫test,其中T沒有明確指定。這種情況稱為不可推導的上下文

類型推論中的歧義

在不可推導的上下文中,編譯器是無法推斷模板參數,因為參數的類型不能唯一確定 T。例如,考慮以下內容場景:

template <>
struct TMap<SomeType> {
  typedef std::map<double, double> Type;
};

template <>
struct TMap<OtherType> {
  typedef std::map<double, double> Type;
};
登入後複製

在這種情況下,TMap::Type 和 TMap::Type 與 std::map 相同。因此,編譯器無法推斷 T 是 SomeType 還是 OtherType。

後果

不可推導上下文的限制具有重要意義:

  • 它防止編譯器根據傳遞給的參數類型隱式專門傳遞給的參數類型化模板函數。
  • 在呼叫以泛型類型為參數的函數時,需要明確模板參數推導或明確模板參數規格。

緩解

為了緩解此限制,可以採用模板模板參數或C 20 的std::is_same_v 等技術手動推導模板參數或提供明確的模板參數清單。

以上是為什麼 C 不能在不可推導的上下文中推導模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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