Pesanan Separa dalam Potongan Templat Fungsi
Masalah:
Piawaian C 11 menerangkan prosedur pesanan separa untuk membandingkan pengkhususan templat fungsi, tetapi maknanya tidak sepenuhnya jelas. Bolehkah anda memberikan penjelasan dengan contoh?
Jawapan:
Untuk menentukan sama ada satu templat fungsi lebih khusus daripada yang lain, standard menggunakan prosedur pesanan separa. Prosedur ini melibatkan mencipta jenis fungsi yang diubah untuk setiap templat dan membandingkannya untuk menentukan templat mana yang lebih khusus.
Langkah 1: Cipta Jenis Fungsi Terubah
Untuk setiap templat, jenis fungsi yang diubah dibuat dengan menggantikan parameter jenis dengan jenis tertentu (dipanggil jenis disintesis). Jenis yang disintesis ini adalah unik dan tidak digunakan di tempat lain dalam kod.
Langkah 2: Padankan Jenis Diubah kepada Templat Asal
Jenis fungsi yang diubah bagi templat pertama dipadankan terhadap jenis fungsi asal templat kedua. Proses itu kemudiannya diulang dalam arah yang bertentangan.
Langkah 3: Tentukan Pengkhususan
Jika satu transformasi menghasilkan padanan dan yang lain tidak, templat dengan yang dipadankan transformasi dianggap lebih khusus. Jika tiada padanan ditemui dalam mana-mana arah, kedua-dua templat tidak dianggap lebih khusus daripada yang lain.
Contoh:
Pertimbangkan dua templat fungsi:
template<typename T, typename U> void foo(T, U); // #1 template<typename T> void foo(T const*, X<T>); // #2
Memadankan jenis fungsi diubah #1b (void foo(int, bool)) dengan jenis fungsi asal #2 (#2) gagal. Walau bagaimanapun, memadankan jenis fungsi diubah #2b (void foo(char const*, X
Oleh itu, templat fungsi #2 adalah lebih khusus daripada templat fungsi #1.
Nota Tambahan:
Ini prosedur pesanan separa juga digunakan untuk membandingkan pengkhususan pengkhususan templat kelas separa. Dalam kes ini, prosedur melibatkan mula-mula mencipta templat fungsi rekaan untuk setiap pengkhususan dan kemudian membandingkan templat fungsi ini menggunakan peraturan yang sama.
Atas ialah kandungan terperinci Bagaimanakah Pesanan Separa C 11 Menentukan Lebih Banyak Templat Fungsi Khusus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!