Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Mendapat Ralat Definisi Semula dengan `enable_if_t` dalam Argumen Templat?

Mengapa Saya Mendapat Ralat Definisi Semula dengan `enable_if_t` dalam Argumen Templat?

Linda Hamilton
Lepaskan: 2024-11-19 03:45:03
asal
908 orang telah melayarinya

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

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() { }
Salin selepas log masuk

Menyusun dengan GCC (5.2) menghasilkan ralat:

"ralat: takrifan semula 'template void g()' "

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() { }
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan