首頁 > 後端開發 > C++ > 為什麼在不可推導的上下文中,模板參數推導會因'std::map”而失敗?

為什麼在不可推導的上下文中,模板參數推導會因'std::map”而失敗?

Linda Hamilton
發布: 2024-12-17 07:33:25
原創
910 人瀏覽過

Why Does Template Argument Deduction Fail with `std::map` in a Non-Deducible Context?

不可推導上下文中的模板參數推導問題

在此程式碼片段中,我們在嘗試使用測試函數時遇到錯誤與TMap instance:

struct TMap
{
    typedef std::map<T, T> Type;
};

template<typename T>
T test(typename TMap<T>::Type &amp;tmap_) { return 0.0; }

int main()
{
    TMap<double>::Type tmap;
    tmap[1.1] = 5.2;
    double d = test(tmap); // Error
}
登入後複製

該錯誤源自於編譯器無法從函數的參數tmap推導出 T 模板參數。出現這種情況是因為我們處於不可推導的上下文中,無法從函數呼叫的參數推斷出模板參數。

在基於模板的程式設計中,在某些情況下編譯器可以自動從函數呼叫參數推導出模板參數。這稱為模板參數推導。但是,在這種情況下,編譯器無法根據 tmap_ 推導 T,因為它是 std::map 的實例,它不會直接綁定到 TMap::Type。

如果我們將 TMap 專門化為特定的 T 類型,則編譯器將無法確定要套用哪個專門化,因為 std::map 是這樣的。可與 TMap 配對和 TMap

要解決這個問題,我們可以在呼叫測試函數時明確指定T 模板參數:

double d = test<double>(tmap);
登入後複製

透過指定double 作為模板參數,編譯器可以正確推導tmap_ 的類型並得出其與TMap::Type 匹配的結論。

以上是為什麼在不可推導的上下文中,模板參數推導會因'std::map”而失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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