Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pesanan Separa Menentukan Pengkhususan Antara Templat Fungsi?

Bagaimanakah Pesanan Separa Menentukan Pengkhususan Antara Templat Fungsi?

Barbara Streisand
Lepaskan: 2024-12-02 07:18:12
asal
773 orang telah melayarinya

How Does Partial Ordering Determine Specialization Between Function Templates?

Prosedur Pesanan Separa dalam Potongan Templat

Prosedur pesanan separa dalam potongan templat menentukan hubungan pengkhususan antara dua templat fungsi. Ia melibatkan dua peringkat:

Peringkat 1: Transformasi

Untuk setiap templat, prosedur pesanan separa mencipta "jenis fungsi diubah" dengan menggantikan semua jenis, bukan jenis , dan parameter templat templat dengan jenis unik dan tidak digunakan.

Peringkat 2: Perbandingan

Jenis fungsi yang diubah dibandingkan dalam dua cara:

  • Padanan Hadapan: Jenis fungsi yang diubah bagi templat 1 dipadankan dengan yang asal jenis fungsi templat 2.
  • Padanan Belakang: Jenis fungsi yang diubah suai templat 2 dipadankan dengan jenis fungsi asal templat 1.

Jika salah satu perlawanan berjaya dan satu lagi gagal, maka templat dengan perlawanan yang berjaya dianggap lebih khusus. Jika tiada padanan berjaya, maka kedua-dua templat tidak lebih khusus.

Contoh:

Pertimbangkan dua templat fungsi berikut:

template<typename T, typename U>
void foo(T, U); // Template 1

template<typename T>
void foo(T const*, X<T>); // Template 2
Salin selepas log masuk

Untuk menentukan templat mana yang lebih khusus, kami:

1. Cipta Jenis Fungsi Berubah:

  • Templat 1 diubah: void foo(int, bool)
  • Templat 2 diubah: void foo(char const*, X)

2. Bandingkan Jenis Fungsi Terubah:

  • Padanan Hadapan: void foo(int, bool) tidak boleh dipadankan dengan void foo(T const*, X).
  • Padanan Ke Belakang: void foo(char const*, X) boleh dipadankan dengan void foo(T, U) dengan menyimpulkan T = char const* dan U = X.

Kesimpulan: Templat 2 lebih khusus daripada Templat 1.

Atas ialah kandungan terperinci Bagaimanakah Pesanan Separa Menentukan Pengkhususan Antara Templat Fungsi?. 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