Apakah itu "Expression SFINAE"?
Istilah "Expression SFINAE" (Kegagalan Penggantian Bukan Satu Ralat) merujuk kepada teknik dalam Templat C yang memanfaatkan keupayaan untuk menggunakan ungkapan dalam decltype untuk membolehkan penggantian selektif argumen templat berdasarkan kesahihan ungkapan.
Ekspresi SFINAE dalam Amalan
Dalam Ungkapan SFINAE, templat fungsi ditakrifkan dengan ungkapan decltype yang menilai kepada jenis yang sah hanya apabila hujah templat tertentu digunakan. Jika penggantian menghasilkan jenis atau ungkapan yang tidak sah, pengkhususan templat fungsi secara berkesan dihapuskan daripada pertimbangan semasa resolusi beban lampau.
Pertimbangkan contoh kod berikut:
template <class T> auto f(T t1, T t2) -> decltype(t1 + t2);
Templat ini mentakrifkan fungsi f yang mengambil dua hujah dan mengembalikan jenis yang diperoleh daripada decltype(t1 t2). Jika ungkapan penambahan t1 t2 sah untuk hujah templat yang diberikan, pengkhususan fungsi didayakan. Jika tidak, ia dilumpuhkan dengan berkesan.
Penghadan dalam VC dan GCC
Walaupun Expression SFINAE adalah sebahagian daripada standard C 11, pelaksanaannya dalam Microsoft Visual C (VC ) dan versi terdahulu GCC adalah terhad. Dalam VC , ia mungkin tidak berfungsi dengan pasti untuk jenis ungkapan tertentu, seperti yang melibatkan penunjuk fungsi ahli. Begitu juga, GCC 4.7.1 mempamerkan had dalam mengendalikan Ekspresi SFINAE.
Penggunaan
Ekspresi SFINAE biasanya digunakan dalam kelas ciri dan senario lain yang perlu mendayakan secara bersyarat atau lumpuhkan pengkhususan templat berdasarkan kesahihan ungkapan. Teknik ini menyediakan pendekatan yang lebih tepat dan selamat jenis untuk pengkhususan berbanding dengan bergantung pada kekangan hujah templat yang eksplisit.
Atas ialah kandungan terperinci Bagaimanakah 'Expression SFINAE' Berfungsi dalam Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!