首頁 >後端開發 >C++ >為什麼從成員類型推斷時模板類型推導失敗?

為什麼從成員類型推斷時模板類型推導失敗?

Barbara Streisand
Barbara Streisand原創
2024-12-19 09:24:10134瀏覽

Why Does Template Type Deduction Fail When Inferring from a Member Type?

模板類型推斷中的推導失敗

當嘗試從類型成員推導模板參數時,確保上下文可推導至關重要。在給定的程式碼中,當編譯器嘗試從類型名 TMap::Type 推導出模板參數 T 時,測試函數內會發生錯誤。

此失敗源自於「不可推導上下文」的概念」。在這種情況下,範本類型TMap 的成員類型「Type」與模板參數T 沒有內在關係。

考慮TMap 的假設特化:

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

如果編譯器必須從TMap::Type 推導T,則會遇到歧義。 TMap::Type 的值為std::map。 🎜>

進一步特化TMap:

template <>
struct TMap<OtherType> {
    typedef std::map<double, double> Type;
};
情況變得更糟,現在如下:

    TMap ;::類型= std::map
  • TMap::Type = std::map
鑑於這種歧義,編譯器無法確定T 是SomeType 還是OtherType。 🎜>因此,在模板成員類型與模板參數沒有直接關係的上下文中,模板參數推導失敗,並且編譯器會引發錯誤。

以上是為什麼從成員類型推斷時模板類型推導失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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