為什麼 C 不能在不可推導的上下文中推導出 T?
在給定的程式碼片段中,模板結構體 TMap 定義為巢狀類型 Type ,表示使用模板參數 T 的 std::map 的特化。但是,編譯器無法在函數中推導出T test.
不可推導的上下文
發生錯誤的原因是程式碼使用類型為typename TMap
類型推論中的歧義
在不可推導的上下文中,編譯器是無法推斷模板參數,因為參數的類型不能唯一確定 T。例如,考慮以下內容場景:
template <> struct TMap<SomeType> { typedef std::map<double, double> Type; }; template <> struct TMap<OtherType> { typedef std::map<double, double> Type; };
在這種情況下,TMap
後果
不可推導上下文的限制具有重要意義:
緩解
為了緩解此限制,可以採用模板模板參數或C 20 的std::is_same_v 等技術手動推導模板參數或提供明確的模板參數清單。
以上是為什麼 C 不能在不可推導的上下文中推導模板參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!