不可推導上下文中的模板參數推導問題
在此程式碼片段中,我們在嘗試使用測試函數時遇到錯誤與TMap
struct TMap { typedef std::map<T, T> Type; }; template<typename T> T test(typename TMap<T>::Type &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 專門化為特定的 T 類型,則編譯器將無法確定要套用哪個專門化,因為 std::map
要解決這個問題,我們可以在呼叫測試函數時明確指定T 模板參數:
double d = test<double>(tmap);
透過指定double 作為模板參數,編譯器可以正確推導tmap_ 的類型並得出其與TMap
以上是為什麼在不可推導的上下文中,模板參數推導會因'std::map”而失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!