Rumah > Artikel > pembangunan bahagian belakang > Mengapa Saya Mendapat Ralat Definisi Semula dengan `enable_if_t` dalam Argumen Templat?
Ralat Takrifan Semula dalam enable_if_t dalam Argumen Templat
Dalam C , sintaks baharu untuk enable_if menggunakan enable_if_t mengalami ralat definisi semula semasa mengalihkan kod ke sintaks baharu. Kod berikut menunjukkan isu:
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() { }
Menyusun dengan GCC (5.2) menghasilkan ralat:
"ralat: takrifan semula 'template
Punca Ralat
Ralat timbul kerana kedua-dua fungsi templat f dan g mempunyai jenis templat yang sama void(). Walaupun argumen templat kedua mereka mempunyai nilai lalai yang berbeza, mereka masih mempunyai jenis yang sama.
Penyelesaian
Untuk menyelesaikan isu, kemas kini sintaks untuk menggunakan std:: enable_if_t dengan jenis hujah kedua yang berbeza. Contohnya:
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() { }
Pengubahsuaian ini memastikan kedua-dua fungsi templat mempunyai jenis templat yang berbeza dan menghapuskan ralat takrifan semula.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Definisi Semula dengan `enable_if_t` dalam Argumen Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!