首頁 >後端開發 >C++ >為什麼編譯器不能推導出 `test(TMap::Type)` 中的 `T`?

為什麼編譯器不能推導出 `test(TMap::Type)` 中的 `T`?

DDD
DDD原創
2024-12-17 02:26:25310瀏覽

Why Can't the Compiler Deduce `T` in `test(TMap::Type)`?

無法從模板推導T::Type

在提供的程式碼中,嘗試推導模板時發生錯誤測試函數的參數T。要理解其中的原因,深入研究「不可推導上下文」的概念至關重要。

在 TMap 的範本定義中,您將一個名為 Type 的別名定義為 std::map 。 。當嘗試從函數呼叫 test(tmap) 推導出 T 時,編譯器會遇到不可推導的上下文。

考慮以下場景:如果TMap 對SomeType 有專門化,其中Type 定義為std::map< ;double, double>,編譯器如何僅根據TMap::Type 是std::map?這種推導是不可能的。

此外,如果 OtherType 存在另一個 TMap 特化,其中 Type 又是 std::map,情況就會變得更加模糊。鑑於 TMap::Type 和 TMap::Type 的已知等價性,編譯器無法區分 SomeType 和 OtherType。

請務必記住,編譯器無法對這種關係做出假設模板定義中使用的類型參數之間。因此,在這種不可推導的上下文中,編譯器無法自動推導模板參數 T。

以上是為什麼編譯器不能推導出 `test(TMap::Type)` 中的 `T`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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