Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pesanan Separa C 11 Menentukan Lebih Banyak Templat Fungsi Khusus?

Bagaimanakah Pesanan Separa C 11 Menentukan Lebih Banyak Templat Fungsi Khusus?

Susan Sarandon
Lepaskan: 2024-12-05 10:37:10
asal
689 orang telah melayarinya

How Does C  11's Partial Ordering Determine More Specialized Function Templates?

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
Salin selepas log masuk

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)) dengan jenis fungsi asal #1 (#1) berjaya.

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!

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