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

Bagaimanakah Pesanan Separa Menentukan Pengkhususan Antara Templat Fungsi?

Barbara Streisand
Barbara Streisandasal
2024-12-02 07:18:12776semak imbas

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

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!

Kenyataan:
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