Mengapakah Menggunakan `std::enable_if_t` Dengan Nilai Lalai Menghasilkan Ralat Definisi Semula?

DDD
Lepaskan: 2024-11-12 11:24:02
asal
260 orang telah melayarinya

Why Does Using `std::enable_if_t` With Default Values Result in a Redefinition Error?

Isu Takrifan Semula dengan Enable_if_t Templat Argumen

Dalam kod yang disediakan, percubaan untuk menukar kekangan jenis std::enable_if menggunakan sintaks baharu (typename = std::enable_if_t...) menghasilkan ralat definisi semula. Ini kerana kedua-dua fungsi templat:

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

dan

template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>>
void g() { }
Salin selepas log masuk

kedua-duanya daripada jenis templatvoid(). Hakikat bahawa hujah jenis kedua mempunyai nilai lalai yang berbeza adalah tidak relevan, kerana pengkompil menganggap kedua-dua templat adalah sama.

Untuk menangani isu ini, adalah perlu untuk mengalih keluar nilai lalai daripada kekangan enable_if_t. Ini menghasilkan kod berikut:

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

Dalam kes ini, hujah jenis kedua kini ialah penunjuk, yang jenisnya bergantung pada yang pertama. Pengkompil boleh menggantikan dalam jenis T untuk menentukan sama ada terdapat konflik antara kedua-dua templat dan ia akan menyelesaikan bahawa tidak ada.

Atas ialah kandungan terperinci Mengapakah Menggunakan `std::enable_if_t` Dengan Nilai Lalai Menghasilkan Ralat Definisi Semula?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan