首頁 >後端開發 >C++ >為什麼我在模板參數中遇到'enable_if_t”的重新定義錯誤?

為什麼我在模板參數中遇到'enable_if_t”的重新定義錯誤?

Linda Hamilton
Linda Hamilton原創
2024-11-19 03:45:03879瀏覽

Why Am I Getting a Redefinition Error with `enable_if_t` in Template Arguments?

模板參數中的enable_if_t重定義錯誤

在C中,使用enable_if_t的enable_if的新語法在將程式碼移植到新語法。以下程式碼示範了這個問題:

template<typename T,
         typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr>
void f() { }

template<typename T,
         typename = std::enable_if_t<std::is_same<int, T>::value>>
void g() { }

使用GCC (5.2) 編譯會產生錯誤:

「錯誤:重新定義'template void g()' 」

錯誤原因

出現錯誤是因為兩個模板函數 f 和 g 具有相同的模板類型 void()。儘管它們的第二個模板參數具有不同的預設值,但它們仍然具有相同的類型。

解決方案

要解決此問題,請更新語法以使用 std:: enable_if_t 具有不同的第二個參數類型。例如:

template<typename T,
         std::enable_if_t<std::is_same<int, T>::value, int>* = nullptr>
void f() { }

template<typename T,
         std::enable_if_t<std::is_same<double, T>::value, double>* = nullptr>
void g() { }

此修改可確保兩個範本函數具有不同的範本類型,並消除重定義錯誤。

以上是為什麼我在模板參數中遇到'enable_if_t”的重新定義錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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