SFINAE untuk Fungsi Ahli Templat Kelas
Dalam kod yang disediakan, SFINAE digunakan pada fungsi ahli templat kelas. Walau bagaimanapun, pendekatan ini menghadapi ralat kerana SFINAE hanya terpakai untuk hujah templat yang disimpulkan, khususnya untuk templat fungsi.
Dalam kes ini, kelas Foo ialah templat, tetapi kedua-dua bar fungsi ahli () diisyaratkan tanpa syarat tanpa mengira daripada parameter templat T. Ini membawa kepada ralat penyusunan yang menunjukkan bahawa kedua-dua beban lampau tidak boleh kedua-duanya sah.
Untuk menyelesaikan isu ini, SFINAE boleh digunakan dengan betul dengan menyimpulkan hujah templat untuk fungsi ahli. Perubahan berikut boleh dibuat:
<code class="cpp">#include <type_traits> struct A{}; struct B{}; template <typename T> struct Foo { template <typename U = T> // Deduce the template argument typename std::enable_if<std::is_same<U, A>::value>::type bar() {} template <typename U = T> // Deduce the template argument typename std::enable_if<std::is_same<U, B>::value>::type bar() {} };</code>
Dengan menyimpulkan hujah templat untuk fungsi ahli, SFINAE kini boleh menentukan lebihan bar() yang hendak dibuat seketika berdasarkan hujah templat sebenar yang disediakan untuk Foo. Pendekatan ini memastikan bahawa kod akan berjaya disusun dan berfungsi seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimanakah SFINAE boleh digunakan dengan berkesan dengan fungsi ahli templat kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!