enable_if_t 範本參數的重新定義問題
在提供的程式碼中,嘗試使用新語法轉換std::enable_if 類型限制(>在提供的程式碼中,嘗試使用新語法轉換std::entype_if 類型約束(>在提供的程式碼中,嘗試使用新語法轉換std::entype_if 類型約束(>在提供的程式碼中,嘗試使用新語法轉換std::entype_if 型態限制(name = std::enable_if_t...) 導致重新定義錯誤。這是因為兩個模板函數:
template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>>> void g() { }
和
template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>> void g() { }
都是template
要解決此問題,有必要從 enable_if_t 限制中刪除預設值。這會產生以下程式碼:
template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>*> void g() { } template<typename T, std::enable_if_t<std::is_same<double, T>::value, int>*> void g() { }
在這種情況下,第二個類型參數現在是一個指針,其類型取決於第一個。編譯器可以代入型別 T 來決定兩個模板之間是否有衝突,如果不存在衝突就會解決。
以上是為什麼使用帶有預設值的“std::enable_if_t”會導致重新定義錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!